首页 > 解决方案 > Pandas - 处理日期格式转换的更好方法

问题描述

我将输入日期作为 YYYY/MM/DD 格式的对象类型,我想在最后将其转换为 MM/DD/YYYY 以报告用例。

提交的日期有多种转换,因此我最初使用以下代码从对象类型转换为日期类型。有基于提交日期的额外转换,例如:过滤特定日期范围...

df_source_data['date'] = pd.to_datetime(df_source_data['date'])

最后,我需要数据框中的最后一组列(作为列表维护在配置中),包括日期,但是我需要 MM/DD/YYYY 格式的日期字段。

final_columns=['date','column1','column2','column3'] # config entry

df_final_data[final_columns] # final select for reporting

我可以使用 strftime 转换日期格式,如下所示,但是有没有更好的方法来执行此操作,而不是再次添加单独的行以将文件转换为所需的格式(即首先从对象类型转换为日期类型,应用过滤器并在结束将日期转换为所需的格式),而不是以某种方式作为配置列表的一部分或代码中的任何更好的方式出现?

df_final_data['date']=df_final_data['date'].dt.strftime('%m/%d/%Y')

标签: pythonpython-3.xpandasdataframe

解决方案


有没有更好的方法来做到这一点,而不是再次添加单独的行来将文件转换为所需的格式(即首先从对象类型转换为日期类型,应用过滤器,最后将日期转换为所需的格式)?TLDR 编号

df_source_data['date'] = pd.to_datetime(df_source_data['date']).dt.strftime('%m/%d/%Y')

这将立即为您提供所需的格式,但是如果您在它们之间应用日期时间转换,它们仍然是 pandas 中的字符串对象,严重限制了您的日期时间过滤。例如,假设您想子集到六月,然后立即转换为您必须做的所需字符串输出方式

df_source_data[df_source_data['date'].str[0:2] == '06']

而不仅仅是能够做

df_source_data[df_source_data['date'].dt.month == 6]

我建议按照您所说的首先执行 to_datetime 转换,然后在最后转换为您想要的格式。

df_source_data['date'] = pd.to_datetime(df_source_data['date'])
...
df_final_data['date']=df_final_data['date'].dt.strftime('%m/%d/%Y')

推荐阅读