【问题标题】:Pandas merge 2 csv with a similar column but different header namePandas 将 2 个 csv 与相似的列合并,但标题名称不同
【发布时间】:2018-03-16 03:51:46
【问题描述】:

我想合并 2 个具有相似列但标题名称不同的 csv 文件。

a.csv:

id name country
1 Cyrus MY
2 May US

b.csv:

user_id  gender 
1 female
2 male

我需要的是,c.csv:

id name country gender
1 Cyrus MY female
2 May US male

但是当我使用下面的代码时得到的结果

import csv
import pandas as pd

df1 = pd.read_csv('a.csv')
df2 = pd.read_csv('b.csv')

df3 = pd.merge(df1,df2, left_on=['id'],right_on=['user_id'], how='outer')
df3.to_csv('c.csv',index=False)

我得到的结果:

id name country user_id gender
1 Cyrus MY 1 female
2 May US 2 male

【问题讨论】:

  • 我猜 df3.drop('user_id ', inplace=True, axis=1) 会解决你的问题。

标签: python pandas csv


【解决方案1】:

您可以将df2 中的user_id 列重命名为id。由于名称相同,因此不会重复。

df2 = pd.read_csv('b.csv').rename(columns={'user_id': 'id'})
df3 = pd.merge(df1, df2, on='id', how='outer')

否则,您可以在合并后删除 user_id 列。

df3 = df3.drop('user_id', axis=1)

【讨论】:

    【解决方案2】:

    您可以使用merge

    df1.merge(df2,left_on='id',right_on='user_id')
    Out[35]: 
       id   name country  user_id  gender
    0   1  Cyrus      MY        1  female
    1   2    May      US        2    male
    

    concat

    pd.concat([df1.set_index('id'),df2.set_index('user_id')],1).reset_index()
    Out[38]: 
       index   name country  gender
    0      1  Cyrus      MY  female
    1      2    May      US    male
    

    【讨论】:

      猜你喜欢
      • 2020-01-02
      • 2020-10-25
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 2022-01-17
      相关资源
      最近更新 更多