当前位置 : 主页 > 编程语言 > python >

Python pandas merge不能根据列名合并两个数据框(Key Error)?

来源:互联网 收集:自由互联 发布时间:2022-06-15
目录 ​​折腾​​ ​​解决方法​​ 折腾 数据分析用惯了R,感觉pandas用起来就有点反人类了。今天用python的pandas处理数据时两个数据框硬是合并不起来。 我有两个数据框,列名是未

目录

  • ​​折腾​​
  • ​​解决方法​​

折腾

数据分析用惯了R,感觉pandas用起来就有点反人类了。今天用python的pandas处理数据时两个数据框硬是合并不起来。

我有两个数据框,列名是未知的,只能知道索引,以及哪两个索引是用做主键合并的。(别问我为啥列名未知,因为我是开发工具)。

思路是这样的,找到主键列,重命名,再合并。

df1.columns.values[args.marker1-1]="markerID"
df2.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​​


作者:Bioinfarmer

 若要及时了解动态信息,请关注同名微信公众号:Bioinfarmer。

【本文由:高防cdn http://www.558idc.com/gfcdn.html 复制请保留原URL】
上一篇:Python如何支持读入gz压缩或未压缩文件?
下一篇:没有了
网友评论