熊猫过滤具有特定年份的数据框行
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 comparison
。 year
的类型应该是什么?
第 2 行缺少一个括号【参考方案2】:
您可以通过 ~
反转掩码和条件使用 Series.dt.year
和 int
转换字符串 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 一年。我只是愚蠢。无论如何感谢所有的帮助。以上是关于熊猫过滤具有特定年份的数据框行的主要内容,如果未能解决你的问题,请参考以下文章