按年过滤大数据集



处理一个非常大的数据集,我需要能够按年过滤。我将文本文件读取为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']

最新更新