我对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]