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