相同数据类型的熊猫合并返回NaN

时间:2019-04-20 14:42:57

标签: python pandas dataframe jupyter-notebook

我正在尝试在相似的列commit_id上合并两个数据帧。但是,即使在检查数据类型以确保它们相同之后,它们也不会合并。

我的第一个数据帧是df1,其中包含两列:commit_idfinal_sentiment。我的第二个数据帧是df2,其中包含两列:commit_idmodification

我正在尝试合并到df3,其中将包含commit_idmodificationfinal_sentiment。但是,如果我在df2上进行左联接,则final_sentiment中的所有值都是NaN。如果我进行右连接,则modification中的所有值均为NaN。我已经检查了commit_id的类型,它是对象。基于此questionthis 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。

如何确定数据帧正确合并,我不确定这里出了什么问题?

1 个答案:

答案 0 :(得分:0)

我在this post中找到了解决方案。有一个空白字符,因此数据不匹配。使用str.strip()为我解决了这个问题。