python - Pandas 中的日期格式
问题描述
我正在尝试将带有日期的列格式化为“月年”格式而不更改非日期值。
input_df = pd.DataFrame({'Period' :['2017-11-01 00:00:00', '2019-02-01 00:00:00', 'Mar 2020', 'Pre-Nov 2017', '2019-10-01 00:00:00' , 'Nov 17-Nov 18'] } )
input_df 是
预期输出是:
我厌倦了以下不起作用的代码:
output_df['Period'] = input_df['Period'].apply(lambda x: x.strftime('%m %Y') if isinstance(x, datetime.date) else x)
请帮忙..
解决方案
您可以使用error='coerce'
and fillna
:
input_df['new_period'] = (pd.to_datetime(input_df['Period'], errors='coerce')
.dt.strftime('%b %Y')
.fillna(input_df['Period'])
)
输出:
Period new_period
0 2017-11-01 00:00:00 Nov 2017
1 2019-02-01 00:00:00 Feb 2019
2 Mar 2020 Mar 2020
3 Pre-Nov 2017 Pre-Nov 2017
4 2019-10-01 00:00:00 Oct 2019
5 Nov 17-Nov 18 Nov 17-Nov 18
更新:第二,更安全的选择:
s = pd.to_datetime(input_df['Period'], errors='coerce')
input_df['new_period'] = np.where(s.isna(), input_df['Period'],
s.dt.strftime('%b %Y'))
推荐阅读
- mysql - 我想要 sql 查询来更改会员状态
- eclipse-plugin - 从活动目标平台导入片段的问题
- assembly - 汇编中的 At&t 语法?
- php - 将变量设置为 public \PDO $pdo; 你为什么做这个?
- linux - Flutter Linux 构建错误 X 窗口系统错误
- jquery - jQuery - 如何减少重复
- ruby - 将字符串划分为二进制索引
- scala - 使用 Intellij 对 Apache Spark 应用程序进行单元测试导致错误
- amazon-web-services - 是否可以为对象上传的 S3 Lambda 事件触发器指定多个前缀和后缀
- javascript - 你好呀。克隆不适用于修改后的图像