【发布时间】:2021-11-21 20:26:38
【问题描述】:
使用我需要能够按年份过滤的非常大的数据集。我将文本文件读取为 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)
此时,我的“日期”字段被列为 dtype“对象”,日期格式如下:
2018-02-09 00:00:00
但是,我不确定如何按年份进行过滤。当我尝试这段代码时:
df3 = df2[df2['Date'].dt.year == 2018]
我收到此错误:
AttributeError: Can only use .dt accessor with datetimelike values
我认为正在发生的事情是某些日期已被读取为空值,但我不确定是否是这种情况,并且我不确定如何将它们转换为日期(零日期很好)。
我过滤数据集的代码是否正确?如何解决此属性错误?
谢谢!
【问题讨论】:
-
当您执行
df2=df1.fillna(0)时,您会不必要地向上转换某些数据类型(datetime64[ns]、bool),因为它们不打算保存整数0。pd.to_datetime已经用适当的空值pd.NaT填充了错误值,所以不要用 0 填充该列。 -
修复了它。谢谢!
标签: python pandas datetime large-data