我正在尝试在相似的列commit_id
上合并两个数据帧。但是,即使在检查数据类型以确保它们相同之后,它们也不会合并。
我的第一个数据帧是df1
,其中包含两列:commit_id
和final_sentiment
。我的第二个数据帧是df2
,其中包含两列:commit_id
和modification
。
我正在尝试合并到df3
,其中将包含commit_id
,modification
和final_sentiment
。但是,如果我在df2
上进行左联接,则final_sentiment
中的所有值都是NaN
。如果我进行右连接,则modification
中的所有值均为NaN
。我已经检查了commit_id
的类型,它是对象。基于此question和this one,我尝试在合并数据帧之前将类型更改为字符串,但是它不起作用。
df1.commit_id = df1.commit_id.astype(str)
df2.commit_id = df2.commit_id.astype(str)
编辑:以下是数据的精简版本,希望可以解决问题。
我有df1
:
| index | commit_id | final_sentiment |
|--------|------------------------------------------|-----------------|
| 807303 | 000e3673387b662e32f1037eeaea2aa29b630448 | -1 |
我有df2
:
| | commit_id | modification |
|---|------------------------------------------|--------------|
| 0 | 000e3673387b662e32f1037eeaea2aa29b630448 | 13 |
df1.info()
返回:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1 entries, 807303 to 807303
Data columns (total 2 columns):
commit_id 1 non-null object
final_sentiment 1 non-null int64
dtypes: int64(1), object(1)
memory usage: 24.0+ bytes
df2.info()返回:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1 entries, 0 to 0
Data columns (total 2 columns):
commit_id 1 non-null object
modification 1 non-null int64
dtypes: int64(1), object(1)
memory usage: 88.0+ bytes
如您所见,它们的提交ID是相同的类型,但是当我合并时,它仍然返回NaN:
df3 = df2.merge(df1, on='commit_id', how='left')
df3
df3返回:
| | commit_id | modification | final_sentiment |
|---|------------------------------------------|--------------|-----------------|
| 0 | 000e3673387b662e32f1037eeaea2aa29b630448 | 13 | NaN |
它应该返回:
| | commit_id | modification | final_sentiment |
|---|------------------------------------------|--------------|-----------------|
| 0 | 000e3673387b662e32f1037eeaea2aa29b630448 | 13 | -1 |
对不起,格式错误。 Jupyter Notebook格式在stackoverflow上不是很好。
如您所见,我检查了两个数据框的类型,它们是相同的。我同时显示了内部联接和左联接。内部联接不返回任何结果,但左侧联接按原样返回结果,但最终的mod是NaN。
如何确定数据帧正确合并,我不确定这里出了什么问题?