Pandas 合并其他列中的 NaN

Pandas Merge NaN in other columns

我有两个数据框,想按两列合并它们并保留其余列。有时,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 文件是学生数据。

我有什么地方做错了吗?

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

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

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

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

另一个检查是为每个 table:

中的键查找 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()

然后尝试加入