[英]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.