如何重新格式化 CSV 中的日期以仅显示 MM/YYYY

Posted

技术标签:

【中文标题】如何重新格式化 CSV 中的日期以仅显示 MM/YYYY【英文标题】:How do I reformat dates in a CSV to just show MM/YYYY 【发布时间】:2017-08-04 00:17:36 【问题描述】:

使用 Python 3 Pandas,花费大量时间试图弄清楚如何从 CSV 中获取一列日期并使用 MM/YYYY 或 YYYY/MM/01 创建一个新列。

数据看起来像 Col1,但我正在尝试生成 Col2:

Col1        Col2
2/12/2017   2/1/2017
2/16/2017   2/1/2017
2/28/2017   2/1/2017
3/2/2017    3/1/2017
3/13/2017   3/1/2017

能够解析年份和月份:

df['Month'] = pd.DatetimeIndex(df['File_Processed_Date']).month
df['Year'] = pd.DatetimeIndex(df['File_Processed_Date']).year
df['Period'] = df['Month'] + '/' + df['Year']

最后一行是错误的。有没有一种聪明的 python 方法来显示 2/2017?

得到错误:“TypeError:ufunc'add'没有包含签名匹配类型dtype的循环('

更新,由 piRsquared 回答:

d = pd.to_datetime(df.File_Processed_Date)
df['Period'] = d.dt.strftime('%m/1/%Y')

这将在将 Col1 成功转换为 Col2 的数据框中创建一个 pandas 列。谢谢!

【问题讨论】:

【参考方案1】:

d 只是'Col1' 转换为Timestamp

d = pd.to_datetime(df.Col1)

然后

d.dt.strftime('%m/1/%Y')

0    02/1/2017
1    02/1/2017
2    02/1/2017
3    03/1/2017
4    03/1/2017
Name: Col1, dtype: object

​

d.dt.strftime('%m%Y')

0    02/2017
1    02/2017
2    02/2017
3    03/2017
4    03/2017
Name: Col1, dtype: object

d.dt.strftime('%Y/%m/01')

0    2017/02/01
1    2017/02/01
2    2017/02/01
3    2017/03/01
4    2017/03/01
Name: Col1, dtype: object

d - pd.offsets.MonthBegin()

0   2017-02-01
1   2017-02-01
2   2017-02-01
3   2017-03-01
4   2017-03-01
Name: Col1, dtype: datetime64[ns]

【讨论】:

啊,是的!我试了几次但成功了:d = pd.to_datetime(df.File_Processed_Date) df['Period'] = d.dt.strftime('%m/1/%Y') – Arthur D. Howland 7 分钟前【参考方案2】:

您要查找的函数是strftime。

【讨论】:

以上是关于如何重新格式化 CSV 中的日期以仅显示 MM/YYYY的主要内容,如果未能解决你的问题,请参考以下文章

如何格式化 mssql 日期时间列以仅在网页输入字段上显示时间?

如何更改引导 datetimepicker 以仅显示日期而不显示时间

如何更改显示日期和时间的 x 轴以仅显示月份名称?

如何重新格式化和排序存储在 nvarchar 中的日期

如何使用 JavaScript 中的格式规范将字符串转换为日期时间?

如何转换日期以仅获取数字年份[重复]