python - 如何在 Pyhton 中将两组数据与 Pandas 合并而不丢失行?
问题描述
我在 Python 中使用 Pandas 来比较两个数据框。我想将一组数据匹配到另一组。
数据框 1
姓名 |
---|
山姆 |
麦克风 |
约翰 |
马修 |
标记 |
数据框 2
姓名 | 数字 |
---|---|
麦克风 | 76 |
约翰 | 92 |
标记 | 32 |
这是我想得到的输出:
姓名 | 数字 |
---|---|
山姆 | 0 |
麦克风 | 76 |
约翰 | 92 |
马修 | 0 |
标记 | 32 |
目前我正在这样做
df1 = pd.read_csv('data_frame1.csv', usecols=['Name', 'Number'])
df2 = pd.read_csv('data_frame2.csv')
df3 = pd.merge(df1, df2, on = 'Name')
df3.set_index('Name', inplace = True)
df3.to_csv('output.csv')
但是,这是删除没有数字的名称。我想保留它们并为它们分配 0。
解决方案
您可以使用pd.merge(..., , how = 'outer')
它保留所有行并为它们插入,Nan
然后使用.fillna(0)
并插入:0
Nan
>>> pd.merge(df1, df2, on = 'Name', how = 'outer').fillna(0)
Name Number
0 Sam 0
1 Mike 76
2 John 92
3 Matthew 0
4 Mark 32
pd.merge(..., , how = 'outer')
如果您想将一个 DataFrame 与另一个 DataFrame 合并,请考虑两个 DataFrame,如下所示,请参见此示例:
>>> df1 = pd.DataFrame({'Name': ['Mike','John','Mark','Matthew']})
>>> df2 = pd.DataFrame({'Name': ['Mike','John','Mark', 'Sara'], 'Number' : [76,92,32,50]})
>>> pd.merge(df1, df2, on='Name', how='outer').fillna(0)
Name Number
0 Mike 76.0
1 John 92.0
2 Mark 32.0
3 Matthew 0.0
4 Sara 50.0
>>> df1.merge(df2,on='Name', how='left').fillna(0)
Name Number
0 Mike 76.0
1 John 92.0
2 Mark 32.0
3 Matthew 0.0
推荐阅读
- java - 我想将字符存储在一个字节数组中并将这个字节数组写入一个文件并将文件读回并输出到屏幕
- javascript - ContentEditable 没有更新虚拟 DOM
- docker - 微服务架构中 docker 容器之间的身份验证,绕过 JWT 身份验证进行内部调用
- android - 如何使用 Navigator 推送值并接收它们?
- xml - CameraX 和条码扫描仪 - 条码扫描仪无法读取
- scala - 无法将 java.util.List 转换为 Scala 列表
- xslt - 如何创建导致空节点序列的源
- javascript - 为什么 Angular 创建版本低于已安装版本的项目?
- xcode - Xcode 12 - 下载更多模拟器运行时为空
- python - 将 csv 文件读入字典