合并两个 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”,但我没能做到。
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)
我有以下两个数据集:
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”,但我没能做到。
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)