繁体   English   中英

将日期列(字符串)转换为日期时间并匹配 Python 中的格式

[英]Convert date column (string) to datetime and match the format in Python

我有一个类似的问题: 将日期列(字符串)转换为日期时间并匹配格式,我想将像“12/7/21”这样的字符串转换为“2021-07-12”作为日期 object。 我相信上面链接中给出的答案是错误的,原因如下:

# The suggested solution on Stackoverflow 
>>> import pandas as pd
>>> df = pd.DataFrame({'Date':['15/7/21']})
>>> df['Date']
0    15/7/21
Name: Date, dtype: object
>>> pd.to_datetime(df['Date'].astype('datetime64'),format='%d/%m/%y')
0   2021-07-15
Name: Date, dtype: datetime64[ns]

因为 Python 不关心上面代码中的指定格式:如果您只是将 15 更改为 12 并输入“12/7/21”,那么它将 12 视为月而不是日:

>>> df = pd.DataFrame({'Date':['12/7/21']})
>>> df['Date']
0    12/7/21
Name: Date, dtype: object
>>> pd.to_datetime(df['Date'].astype('datetime64'),format='%d/%m/%y')
0   2021-12-07
Name: Date, dtype: datetime64[ns]

有谁知道这个问题的最佳解决方案是什么? (在 R 中,您只需使用 lubridate::dmy(df$Date) 即可完美运行)

.astype('datetime64')尝试解析字符串MM/DD/YY但是如果它不能(在 MM > 12 的情况下)它将回退到解析为DD/MM/YY这就是为什么你会看到不一致的行为:

>>> import pandas as pd
>>> pd.Series('15/7/21').astype('datetime64')
0   2021-07-15
dtype: datetime64[ns]
>>> pd.Series('14/7/21').astype('datetime64')
0   2021-07-14
dtype: datetime64[ns]
>>> pd.Series('13/7/21').astype('datetime64')
0   2021-07-13
dtype: datetime64[ns]
>>> pd.Series('12/7/21').astype('datetime64')
0   2021-12-07
dtype: datetime64[ns]

解决这个问题的方法只是将Series字符串传递给pd.to_datetime而不是中间转换为datetime64 s。 所以你可以简单地做

pd.to_datetime(df['Date'], format='%d/%m/%y')

没有.astype演员表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM