熊猫过滤具有特定年份的数据框行

Posted

技术标签:

【中文标题】熊猫过滤具有特定年份的数据框行【英文标题】:Pandas filter dataframe rows with a specific year 【发布时间】:2018-04-03 08:10:03 【问题描述】:

我有一个数据框df,它有一个Date 列。我想创建两个新的数据框。一个包含来自df 的所有行,其中年份等于some_year,另一个数据框包含df 的所有行,其中年份不等于some_year。我知道你可以做到df.ix['2000-1-1' : '2001-1-1'],但为了获得所有不在 2000 年的行,需要创建 2 个额外的数据框,然后将它们连接/加入。

有这样的方法吗?

include = df[df.Date.year == year]
exclude = df[df['Date'].year != year]

这段代码不起作用,但有没有类似的方法?

【问题讨论】:

【参考方案1】:

您可以使用日期时间访问器。

import datetime as dt
df['Date'] = pd.to_datetime(df['Date'])

include = df[df['Date'].dt.year == year]
exclude = df[df['Date'].dt.year != year]

【讨论】:

嗨 Vaishali。当我尝试这个时,使用year 作为整数值,我得到TypeError: invalid type comparisonyear 的类型应该是什么? 第 2 行缺少一个括号【参考方案2】:

您可以通过 ~ 反转掩码和条件使用 Series.dt.yearint 转换字符串 year 来简化它:

mask = df['Date'].dt.year == int(year)
include = df[mask]
exclude = df[~mask]

【讨论】:

嗨@jezrael。我对另一个答案有相同的评论。当我尝试这个 mask = df.Date.dt.year == year 我得到 TypeError: invalid type comparison 。我的 year 变量是一个 int。会不会是这个问题? 我已经这样做了。但我又试了一次,我得到了同样的错误。当我执行 df.Date 时,它​​会打印出 dtype: datetime64[ns] x|我才发现。我的year vairable 是一个字符串 not 和 int。对不起。我使用了一个 int 年,现在它可以工作了。对不起。 我实际上更喜欢 int 一年。我只是愚蠢。无论如何感谢所有的帮助。

以上是关于熊猫过滤具有特定年份的数据框行的主要内容,如果未能解决你的问题,请参考以下文章

在数据框中编辑日期以在熊猫中显示年份

如何在熊猫时间序列中获得一个月的所有行而不考虑年份?

SQL查询以获取特定年份的当前日期(考虑月份和日期)的数据

如何检查熊猫数据框行在各个列中是不是具有某些值,可扩展性

用熊猫在列中绘制带有年份的数据框

如何从熊猫数据框中提取日期/年份/月份?