如何在熊猫中保持日期格式相同? [复制]

Posted

技术标签:

【中文标题】如何在熊猫中保持日期格式相同? [复制]【英文标题】:How to keep date format the same in pandas? [duplicate] 【发布时间】:2021-09-03 17:00:10 【问题描述】:
import pandas as pd
import sys
df = pd.read_csv(sys.stdin, sep='\t', parse_dates=['Date'], index_col=0)
df.to_csv(sys.stdout, sep='\t')
Date    Open
2020/06/15  182.809924
2021/06/14  257.899994

我得到以下输出和上面显示的输入。

Date    Open
2020-06-15  182.809924
2021-06-14  257.899994

日期格式已更改。有没有办法自动维护日期格式? (例如,如果输入格式为 YYYY/MM/DD,则输出格式应为 YYYY-MM-DD。如果输入格式为 YYYY-MM-DD,则输出格式应为 YYYY-MM-DD 等。 )

我更喜欢一种无需手动测试数据格式的方法。最好有一种自动方式来维护日期格式,无论特定的日期格式是什么。

【问题讨论】:

2020/06/15 是 dtype string2020-06-15 是 dtype datetime[ns] 因为您使用 parse_date 参数所以 Date 列转换为 datetime 您可以随时将格式更改为字符串通过使用strftime() 方法df['Date'].dt.strftime('%Y/%m/%d') 您在这里混淆了两件事。文件中的字符串格式和 pandas 用于在解析后打印日期的表示形式。一个与另一个无关 xkcd.com/1179 为什么ISO定义的YYYY-MM-DD优于其他格式?似乎如果 ISO 定义了 YYYY/MM/DD,它会同样有效。 上面的论坛回答涵盖了您的问题。机器和人类的日期时间格式是有区别的。如果我在你哪里,我不会在意风格,但只有当我必须与人类分享日期时,例如。 to_csv 或使用.style 显示 【参考方案1】:

如果您需要将日期作为日期进行操作,请将日期保留为字符串并将它们解析为额外的列?

df = pd.read_csv(sys.stdin, sep='\t', index_col=0)
df['DateParsed'] = pd.to_datetime(df["Date"])

【讨论】:

df["Date"].map(pd.to_datetime)pd.to_datetime(df["Date"]) 相比非常慢 - 在使用 %timeit 的快速测试中对我来说慢了大约 1000 倍。 感谢@AndrewEckart,我已经改变了答案【参考方案2】:

您可以在to_csv 中指定date_format 参数:

df.to_csv(sys.stdout, sep='\t', date_format="%Y/%m/%d")

【讨论】:

我不想在我的代码中手动指定特定的日期格式,因为输入可以是任何日期格式。 那么你最好的选择是首先不解析日期,因为这将保留字符串格式。您可以使用df["parsed_date"] = pd.to_datetime(df["Date"]) 创建第二列,将其用于计算,然后通过传递columns=[col for col in df.columns if col != "parsed_date"] 将其排除在to_csv 中。

以上是关于如何在熊猫中保持日期格式相同? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用熊猫更改数据框中的日期时间格式? [复制]

如何在熊猫中格式化日期格式

如何使数据框日期列中的日期格式相同? [复制]

在数据框中编辑日期以在熊猫中显示年份

如何将日期时间格式转换为分钟 - 熊猫

熊猫用字符串转换日期