【问题标题】:Python Pandas - Rename and merge of 3 datasetsPython Pandas - 重命名和合并 3 个数据集
【发布时间】:2018-04-05 12:03:11
【问题描述】:

我想更改 3 个数据集的公共变量名称 然后合并它们,但似乎重命名不会将 var name 更改为 EID, 我该如何解决?

另外,我可以使用 pd.merge 命令合并 3 个数据集,而不是对所有数据进行 1:1 合并吗?

谢谢

data1516 = pd.read_csv('C:/data2015_2016.csv', sep='|', names=None, header=1, encoding='latin-1')    
data1617 = pd.read_csv('C:/data2016_2017.csv', sep='|', names=None, header=1, encoding='latin-1')    
data1718 = pd.read_csv('C:/data2017_2018.csv', sep='|', names=None, header=1, encoding='latin-1')

data1516.rename(index=str, columns={"Employer: ID" : "EID"})    
data1617.rename(index=str, columns={"Employer: ID" : "EID"})    
data1718.rename(index=str, columns={"Employer: ID" : "EID"})    
data1517 = pd.merge(data1516, data1617, on='EID', how='outer')

【问题讨论】:

  • 将其分配回data1516=data1516.rename(index=str, columns={"Employer: ID" : "EID"})
  • 谢谢!但添加它们后我仍然会收到一个 keyerror。
  • KeyError: 'EID'
  • 将其添加为答案。请检查
  • 已经为所有人做了:) thx

标签: python pandas merge rename


【解决方案1】:

这应该可以解决问题:

dfs = [data1516, data1617, data1718]
df = pd.concat([x.rename(columns={"Employer: ID" : "EID"}) for x in dfs], axis=1)

【讨论】:

  • 顺便说一句,为了简单的查询,有没有办法使用合并而不是 concat 来做到这一点?
  • 似乎我们可以将 EID 设置为索引应该更好吧?
  • @Nora, merge() 只接受两个 DF,因此您必须重复 (N-1) 次,其中 N 是要加入的 DF 数
  • 非常感谢 Max,是的,我想我会合并,因为我的主管不想要 concat,但你的重命名有效!
  • @maxU 你能帮我把你的方程式分解成只重命名吗?
【解决方案2】:

通过使用reduce

data1516=data1516.rename(columns={"Employer: ID" : "EID"})    
data1617=data1617.rename(columns={"Employer: ID" : "EID"})    
data1718=data1718.rename(columns={"Employer: ID" : "EID"})  

l=[data1516,data1617,data1718]
import functools 
df=functools.reduce(lambda x, y: pd.merge(x, y, on = 'EID'), l)

【讨论】:

  • 试过用这个,但仍然是关键错误。顺便说一句,感谢您让我提醒功能工具!多么初学者
猜你喜欢
  • 2018-04-02
  • 2021-01-17
  • 1970-01-01
  • 2019-03-03
  • 1970-01-01
  • 2018-11-01
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多