python – 当索引不匹配时更新pandas数据帧的最有效方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 当索引不匹配时更新pandas数据帧的最有效方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1904字,纯文字阅读大概需要3分钟。
内容图文
![python – 当索引不匹配时更新pandas数据帧的最有效方法](/upload/InfoBanner/zyjiaocheng/729/16736396285344ebb2f34a637767ad70.jpg)
我有两个pandas DataFrames,我想用另一个更新一个…
但我无法确定索引是否匹配. (所以使用DataFrame.update是个问题!)
〔实施例:
import pandas as pd
df1 = pd.DataFrame([('path1', 0, 0, 0),
('path2', 0, 0, 0),
('path3', 0, 0, 0),
('path4', 0, 0, 0),],
columns=['path', 'class', 'manual', 'conf'],
index = [1,2,3,4])
df2 = pd.DataFrame([('path1', 1, 0, 0),
('path2', 0, 1, 0),
('path3', 0, 0, 1),
('path5', 1, 1, 0),
('path6', 1, 1, 0),],
columns=['path', 'class', 'manual', 'conf'],
index = [10,11,12,13,14])
期望的结果:
update_annotations(df1, df2)
path class manual conf
1 path1 1 0 0
2 path2 0 1 0
3 path3 0 0 1
4 path4 0 0 0
df1.update(df2)可能存在风险,因为这些数据帧的索引可能不匹配.这样做最安全,最有效的方法是什么?
解决方法:
快速而肮脏
df1[['path']].merge(df2, 'left')
path class manual conf
0 path1 1.0 0.0 0.0
1 path2 0.0 1.0 0.0
2 path3 0.0 0.0 1.0
3 path4 NaN NaN NaN
更快,更少脏
df1[['path']].merge(df2, 'left').fillna(0).astype(df1.dtypes)
path class manual conf
0 path1 1 0 0
1 path2 0 1 0
2 path3 0 0 1
3 path4 0 0 0
迂
用df1填充NaN
df1[['path']].merge(df2, 'left').fillna({**df1}).astype(df1.dtypes)
path class manual conf
0 path1 1 0 0
1 path2 0 1 0
2 path3 0 0 1
3 path4 0 0 0
df1.set_index('path').assign(**df2.set_index('path')).reset_index()
path class manual conf
0 path1 1.0 0.0 0.0
1 path2 0.0 1.0 0.0
2 path3 0.0 0.0 1.0
3 path4 NaN NaN NaN
保留索引
由于订单保证相同,我们可以使用set_index
df1[['path']].merge(df2, 'left').fillna({**df1}).astype(df1.dtypes).set_index(df1.index)
path class manual conf
1 path1 1 0 0
2 path2 0 1 0
3 path3 0 0 1
4 path4 0 0 0
内容总结
以上是互联网集市为您收集整理的python – 当索引不匹配时更新pandas数据帧的最有效方法全部内容,希望文章能够帮你解决python – 当索引不匹配时更新pandas数据帧的最有效方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。