如何在熊猫中保持日期格式相同? [复制]
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 string
但 2020-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
中。以上是关于如何在熊猫中保持日期格式相同? [复制]的主要内容,如果未能解决你的问题,请参考以下文章