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



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

# 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,而不是中间转换为datetime64s。因此,您可以简单地执行

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

没有.astype铸造

相关内容

  • 没有找到相关文章

最新更新