使用Pandas在Dataframe中操作系列

时间:2019-03-25 17:15:02

标签: 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

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

3 个答案:

答案 0 :(得分:1)

我认为您正在寻找:

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]

答案 1 :(得分:0)

据此: https://pandas.pydata.org/pandas-docs/stable/getting_started/basics.html#dt-accessor

如果您有一个DateTime格式的系列,则应该可以使用dt访问器。

因此您可能可以执行以下操作:

df[df.dt.year == 2017]

答案 2 :(得分:0)

尝试:

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

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