Python pandas merge不能根据列名合并两个数据框(Key Error)?
2021/7/7 22:36:16
本文主要是介绍Python pandas merge不能根据列名合并两个数据框(Key Error)?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 折腾
- 解决方法
折腾
数据分析用惯了R,感觉pandas用起来就有点反人类了。今天用python的pandas处理数据时两个数据框硬是合并不起来。
我有两个数据框,列名是未知的,只能知道索引,以及哪两个索引是用做主键合并的。(别问我为啥列名未知,因为我是开发工具)。
思路是这样的,找到主键列,重命名,再合并。
df1.columns.values[args.marker1-1]="markerID" df1.columns.values[args.marker2-1]="markerID" pd.merge(df1,df2,on='markerID')
但结果就是无论如何也合并不了。报错KeyError:'markerID'
。
网上查了下是说不能直接用columns.values
赋值,要分开。于是:
colnames_df1 = df1.columns colnames_df1[args.marker1-1] = "markerID" df1.columns = colnames_df1 colnames_df2 = df2.columns colnames_df2[args.marker1-1] = "markerID" df2.columns = colnames_df2 pd.merge(df1,df2,on='markerID')
实际上并没有什么区别。TypeError: Index does not support mutable operations
把数据框的列名全部print出来,看起来是正常的,为什么就合并不了?
用很粗暴的方法:
pd.merge(df1,df2,left_index=True,right_index=True)
对于大部分数据可以,但有些数据是不行的,而且不报错,结果是错的,有很大风险。
解决方法
最后在网上又查了一圈,终于找到了答案。
原因:
两个数据框的主键名看起来一样,实际上可能不同,因为可能含有空格。怎么来的?无解。
解决方法就是去除列名中可能存在的空格。
方法一:
df1.columns = df1.columns.str.strip() df2.columns=df2.columns.str.strip()
方法二:
在数据读入时去掉。
pd.read_csv(file,sep='\s*,\s*') # delimiter includes x*whitespace before and after
对应到我的数据就是:
df1.columns = df1.columns.str.strip() df2.columns = df2.columns.str.strip() mrkid = df1.columns.values[args.marker-1] df1.columns.values[args.marker-1]="markerID" mergesnp = pd.merge(df1,df2,on='markerID') mergesnp.columns.values[args.marker-1]=mrkid
参考:https://stackoverflow.com/questions/47608112/python-pandas-merge-cant-find-column-name
这篇关于Python pandas merge不能根据列名合并两个数据框(Key Error)?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门