熊猫合并其他列中的 NaN

时间:2021-07-11 10:15:40

标签: python-3.x pandas merge

我有两个数据框,想将它们按两列合并并保留其余的列。有时,Pandas 只是将之前包含数据的所有其他列进行 NaN 运算。这是我从 SQL 中不习惯的东西。 我使用的合并命令有误吗?

数据类型和列名是: pdBewertungen

[[id]]                               int64
Matrikelnummer                     float64
Nachname                            object
Vorname                             object
Institution                         object
Übungsblätter gesamt (Punkte)       object
Blatt1                              object
Blatt2                              object
Blatt3                              object
Blatt4                              object
Blatt5                              object
Zuletzt aus diesem Kurs geladen      int64
dtype: object

和 pdGruppen学士

Vorname            object
Nachname           object
Matrikelnummer     object
Mailadresse        object
Gruppe             object
Gruppenwahl       float64
dtype: object

我想加入 [Vorname, Nachname] 对(抱歉,这些名字是德语)。

结果给了我一个数据框,其中 Blatt1、Blatt2...都是 NaN,即使它们之前是整数。结果列数正确。

命令是:

dfBA = pd.merge(pdGruppenBachelor, pdBewertungen,  how='left', on=['Vorname','Nachname'])

抱歉,我无法给出示例代码,因为它背后的 CSV 是学生数据。

我做错了什么吗?

1 个答案:

答案 0 :(得分:2)

首先,从您的问题中不清楚每个表的名称是什么 我们可以假设包含 blats 的表是正确的,如果连接是左的

在我看来,有几件事需要检查 首先,按照您的示例进行内部连接:

dfBA = pd.merge(pdGruppenBachelor, pdBewertungen,  how='inner', on=['Vorname','Nachname'])

在这种情况下,即使行数会减少,也不会出现 NULL。 如果是这种情况,那只是意味着表之间没有很多(或很少)匹配...... table1 包含人 ['a','b','c'] 而 table2 包含 ['a', 'c','d'] 例如

另一个检查是为每个表中的键查找 NULL:

pdGruppenBachelor[['Vorname','Nachname']].isna().sum()
pdBewertungen[['Vorname','Nachname']].isna().sum()

每个 NULL 情况,甚至部分(仅缺少 Vorname)都会影响 JOIN 我要检查的最后一件事是名称中是否没有空格,或大写/小写:“John Smith”与“joHn sMith”

所以一个可能的解决方案应该是这样的

pdGruppenBachelor['Vorname'] = pdGruppenBachelor['Vorname'].str.lower().strip()
pdBewertungen['Vorname'] = pdBewertungen['Vorname'].str.lower().strip()

pdGruppenBachelor['Nachname'] = pdGruppenBachelor['Nachname'].str.lower().strip()
pdBewertungen['Nachname'] = pdBewertungen['Nachname'].str.lower().strip()

然后尝试加入