Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Pandas操作数据帧中的序列_Python_Pandas_Dataframe_Series - Fatal编程技术网

Python 使用Pandas操作数据帧中的序列

Python 使用Pandas操作数据帧中的序列,python,pandas,dataframe,series,Python,Pandas,Dataframe,Series,我在数据框中有一个日期列,如下所示: (Year-Month-Day) 2017-09-21 2018-11-25 我正在尝试创建一个只考虑年份的函数,我一直在尝试以下内容 df[df['DateColumn'].str[:3]=='2017'] 但我收到了这个错误: AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas 如何在函数中只考虑日期的

我在数据框中有一个日期列,如下所示:

(Year-Month-Day)
2017-09-21
2018-11-25
我正在尝试创建一个只考虑年份的函数,我一直在尝试以下内容

df[df['DateColumn'].str[:3]=='2017']
但我收到了这个错误:

AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas

如何在函数中只考虑日期的前四个字符?谢谢。

我想您正在寻找:

df['year'] = [d.year for d in df['DateColumn']]
仅当列的元素为pandas.tslib.Timestamp时,此操作才有效。如果没有,则:

df['DateColumn'] = pd.to_datetime(df['DateColumn'])
df['year'] = [d.year for d in df['DateColumn']]
更新:改用此选项:

df.loc[pd.to_datetime(df['DateColumn']).dt.year == 2017]
据此:

如果您有一个日期时间格式的系列,您应该能够使用dt访问器

因此,您可能可以这样做:

df[df.dt.year == 2017]
尝试:

df=pd.to_datetime(df.col).apply(λx:x.year)


这将
col
转换为日期时间格式,然后从中提取年份,使其成为一个系列。

它似乎告诉您不能使用字符串方法访问日期时间对象。关于访问pandas datetime值的更多阅读
pd.to_datetime(df['DateColumn']).dt.year
当您使用pandas时,请记住不要使用loopsOk。谢谢:)我认为这与我得到的结果类似:df.loc[df.loc[,'DateColumn'].dt.year==2017,:]
df
是一个数据框架,而不是一个系列。它将没有
dt
存取器。在发布答案之前,请先测试一下你的代码。哎呀,我的错了,标题上写着“系列”。