日期格式不匹配,熊猫使用错误的世纪



我对python还很陌生,很难清理一些数据。我有两个数据集,我打算将它们连接起来,然后进行一些分析。日期列的格式不同,我很难处理这个问题。问题是,在第二个数据集中,年份只有2位数,当我使用pd.to_datetime时,它有时会猜错世纪。使这两种格式匹配的最佳方法是什么?我想用这个做一些时间序列的东西。没有重叠,因为该数据集中最早的日期是1939年。

两者都是用Dtype Object读入的。

示例数据

import pandas as pd 
data1 = {'col1': ['row1', 'row2', 'row3'], 'col2': ['1939, May', '1940, June', '2015, March'],}
df1 = pd.DataFrame(data1, columns = ['col1', 'col2'])
df1
col1    col2
0   row1    1939, May
1   row2    1940, June
2   row3    2015, March
data2 = {'col1': ['row1', 'row2', 'row3'], 'col2': ['Dec-1939', 'Apr-1980', 'Aug-2011'],}
df2 = pd.DataFrame(data2, columns = ['col1', 'col2'])
df2
col1    col2
0   row1    Dec-1960
1   row2    Apr-1980
2   row3    Aug-2011

这在df1pd.to_datetime(df['col2'], format='%Y, %B', errors='coerce')上运行良好,但当我将format='%b-%y'更改为df2时,它将从1939更改为2039。我认为最好在连接两个数据帧之前创建一个匹配的格式。。

您是否尝试过忽略format?熊猫通常只能自动检测。

df1:

df1.col2 = pd.to_datetime(df1.col2)
#    col1       col2
# 0  row1 1939-05-01
# 1  row2 1940-06-01
# 2  row3 2015-03-01

df2:

df2.col2 = pd.to_datetime(df2.col2)
#    col1       col2
# 0  row1 1939-12-01
# 1  row2 1980-04-01
# 2  row3 2011-08-01

在您的情况下应该是'Y'

pd.to_datetime(df2['col2'], format='%b-%Y', errors='coerce')
Out[9]: 
0   1939-12-01
1   1980-04-01
2   2011-08-01
Name: col2, dtype: datetime64[ns]

最新更新