python-3.x - Pandas 在其他列中合并 NaN
问题描述
我有两个数据框,希望将它们合并为两列并保留其余列。有时,Pandas 只是将之前包含数据的所有其他列排除在外。那是我不习惯使用 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
和 pdGruppenBachelor
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 是学生数据。
有什么我做错了吗?
解决方案
首先,从您的问题中不清楚每个表的名称是什么,我们可以假设包含 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()
然后尝试加入
推荐阅读
- reactjs - 中继棱镜 graphql 更新存储
- java - How to execute sudo commands in Java and get error output?
- python - python中的字母位置
- amazon-s3 - 在 ubuntu 16 上使用 s3fs 自动挂载 S3
- android - Android 构建目标“在 NDK 工具链中找不到工具链”
- mysql - 使用两个表的 SQL 存储过程
- r - ggplot - 在不同颜色范围内映射低于和高于阈值的值
- go - 从 Go 制作的生产服务器中获取恐慌
- kubernetes - Terraform、Kubernetes、Mesos 等——它们是如何连接的
- go - 具体类型与返回类型上的接口不匹配