处理一个非常大的数据集,我需要能够按年过滤。我将文本文件读取为csv:
df1=pd.read_csv(filename,
sep="t",
error_bad_lines=False,
usecols=['ID','Date', 'Value1', 'Value2'])
将Date列转换为日期:
df1['Date'] = pd.to_datetime(df1['Date'], errors='coerce')
我还将所有的空转换为零:
df2=df1.fillna(0)
此时,我的"日期"字段被列为dtype "Object",日期的格式如下:
2018-02-09 00:00:00
然而,我不确定如何按年过滤。当我尝试这段代码:
df3 = df2[df2['Date'].dt.year == 2018]
我得到这个错误:
AttributeError: Can only use .dt accessor with datetimelike values
我认为正在发生的事情是一些日期已被读取为空值,但我不确定情况是否如此,我不确定如何将它们转换为日期(零日期是好的)。
我的代码过滤数据集正确吗?如何解决这个属性错误?
谢谢!
您还可以指定在读取Date
时解析它。正如@ALollz提到的,您在Date
中有一些NaN值,当您将它们替换为0时,这会改变列的类型。如果您只想按年份进行过滤,那么下面的代码应该可以工作。如果您想按年/月过滤,则使用'%Y-%m
,年/月/日期使用'%Y-%m-%d'
。
df1=pd.read_csv(filename,
sep="t",
error_bad_lines=False,
usecols=['ID','Date', 'Value1', 'Value2']
parse_dates=['Date'])
df_filtered = df1[df1['Date'].dt.strftime('%Y') == '2018']