按年份过滤大数据集

Filtering large data set by year

处理一个非常大的数据集,我需要能够按年份进行过滤。我将文本文件读取为 csv:

df1=pd.read_csv(filename,
                    sep="\t",
                    error_bad_lines=False,
                    usecols=['ID','Date', 'Value1', 'Value2'])

并将日期列转换为日期:

df1['Date'] = pd.to_datetime(df1['Date'], errors='coerce')

我还将所有空值转换为零:

df2=df1.fillna(0)

此时,我的 'Date' 字段列为 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 时,这会更改列的类型。如果您只想按年份过滤,那么下面的代码应该可以工作。如果你想按 year/month 过滤,那么使用 '%Y-%m 和 year/month/date 使用 '%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']