首页 > 解决方案 > 在熊猫中编辑日期以仅按列显示年份

问题描述

我试图了解如何使用 pandas 在 python 中编辑数据框,以便删除除年份之外的所有内容。

示例:如果日期是 2014-01-01,我希望它显示 2014 并删除月份和日期。所有日期都在一个列中。

谢谢指教!

标签: pythonpandas

解决方案


您可以将numpy.datetime64日期值转换为datetime使用pd.to_datetime(),然后您可以从中提取年份或月份或日期。

import numpy as np
date = np.datetime64('2014-01-01')
type(date)

输出:

numpy.datetime64

使用 . 将此日期转换为 pandas 日期时间pd.to_datetime

date = pd.to_datetime(date)
type(date)

输出:

pandas._libs.tslibs.timestamps.Timestamp

然后您可以使用.year date.year提取年份

输出:

2014

所以,如果你有一个df:

df = pd.DataFrame({'date': [np.datetime64('2014-01-01'), np.datetime64('2015-01-01'), np.datetime64('2016-01-01')]})
df['date'] = pd.DatetimeIndex(df['date']).year
df

输出:

   date
0  2014
1  2015
2  2016

或者,您也可以这样做

df = pd.DataFrame({'date': [np.datetime64('2014-01-01'), np.datetime64('2015-01-01'), np.datetime64('2016-01-01')]})
df['date'] = df['date'].apply(lambda x: x.strftime('%Y'))
df

输出:

   date
0  2014
1  2015
2  2016

编辑 1

当列具有日期值时使用年份分组

df = pd.DataFrame({'date': [np.datetime64('2014-01-01'), np.datetime64('2015-01-01'), np.datetime64('2016-01-01')]})
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
df.groupby(df.index.year).size()

输出:

date
2014    1
2015    1
2016    1

即使您从日期中删除了月份和日期并且您的列中只有年份,您仍然可以执行相同的操作

df = pd.DataFrame({'date': [np.datetime64('2014-01-01'), np.datetime64('2015-01-01'), np.datetime64('2016-01-01')]})
df['date'] = pd.DatetimeIndex(df['date']).year
df.groupby('date').size()

输出:

date
2014    1
2015    1
2016    1

推荐阅读