合并两个 Panda DataFrame - 问题:日期格式不同

Merge two Panda DataFrames - Problem: Different Formats on Date

我有以下两个数据集:

df_ff.head()
Out[382]: 
     Date  Mkt-RF   SMB   HML    RF
0  192607    2.96 -2.38 -2.73  0.22
1  192608    2.64 -1.47  4.14  0.25
2  192609    0.36 -1.39  0.12  0.23
3  192610   -3.24 -0.13  0.65  0.32
4  192611    2.53 -0.16 -0.38  0.31

df_ibm.head()
Out[384]: 
        Date        Open        High  ...       Close   Adj_Close     Volume
0 2012-01-01  178.518158  184.608032  ...  184.130020  128.620193  115075689
1 2012-02-01  184.713196  190.468445  ...  188.078400  131.378296   82435156
2 2012-03-01  188.556412  199.923523  ...  199.474182  139.881134   92149356
3 2012-04-01  199.770554  201.424469  ...  197.973236  138.828659   90586736
4 2012-05-01  198.068832  199.741867  ...  184.416824  129.322250   89961544

关于日期变量的类型,我们有:

df_ff.dtypes
Out[383]: 
Date        int64 

df_ibm.dtypes
Out[385]: 
Date         datetime64[ns]

我想合并(在 SQL 语言中:“内部连接”)这两个数据集,因此正在编写:

testMerge = pd.merge(df_ibm, df_ff, on = 'Date')

这会产生错误:

ValueError: You are trying to merge on datetime64[ns] and int64 columns. If you wish to proceed you should use pd.concat

由于日期变量的格式不同,此合并不起作用。关于如何解决这个问题的任何提示?我的第一个想法是翻译格式的日期(在 df_ff 数据集中): “192607”格式为“1926-07-01”,但我没能做到。

使用pd.to_datetime:

df['Date2'] = pd.to_datetime(df['Date'].astype(str), format="%Y%m")
print(df)

# Output
     Date      Date2
0  192607 1926-07-01
1  192608 1926-08-01
2  192609 1926-09-01
3  192610 1926-10-01
4  192611 1926-11-01

第一步是转换为datetime64[ns]并协调Date列:

df_ff['Date'] = pd.to_datetime(df_ff['Date'].astype(str), format='%Y%m')

然后将它们转换成索引(因为它更有效率):

df_ff = df_ff.set_index('Date')
df_ibm = df_ibm.set_index('Date')

终于pd.merge两个pd.DataFrame:

out = pd.merge(df_ff, df_ibm, left_index=True, right_index=True)