【问题标题】:Merge specific column data from multiple csv files合并来自多个 csv 文件的特定列数据
【发布时间】:2019-11-08 09:02:20
【问题描述】:

我有多个(大)csv 文件,让它们分别为 1.csv2.csv。两者都有相同的唯一标识符列。例如,使用标识符name

1.csv                     2.csv

name,age,height           name,gender
john,34,176               john,male
mary,19,183               kim,female
kim,27,157

从这些 csv 文件中,我创建了两个数据框 df1df2

目标是合并一些数据(不是所有列)。条件是该人同时存在于两个 csv 文件中:

result

name,age,gender
john,34,male
kim,27,female

为此,我做了以下工作:

names = df1['name'].tolist()

result_rows = []
for name_iter in names :
    age_df =    df1[df1['name'] == name_iter ][['age']]
    gender_df = df2[df2['name'] == name_iter ][['gender']]

    if gender_df.empty:
        continue

    age = age_df.values[0][0]
    gender = gender_df.values[0][0]
    row = [name, age, gender]

    result_rows.append(row)

之后,我有一个列表列表 (result_rows),我使用 python 内置模块将其写入 csv 文件。

我认为代码很难阅读/理解。有没有更简单的解决方案,即避免将数据帧中的数据放入此任务的列表结构中?

【问题讨论】:

    标签: python pandas csv select merge


    【解决方案1】:

    考虑使用 pandas 合并功能。

    import pandas as pd
    
    # If 'name' is the only identifier in both DFs:
    df3 = df1.merge(df2, on="name")
    
    # Else if 'name', 'age', and 'gender' are available in both DFs:
    df3 = df1.merge(df2, on=["name", "age", "gender"])
    

    【讨论】:

      【解决方案2】:
      df1=pd.DataFrame({'name':['john','mary','kim'],'age':[34,19,27],'height':[176,183,157]})
      df2=pd.DataFrame({'name':['john','kim'],'gender':['male','female']})
      df=df2.merge(df1,on='name')
      del df['height']
      

      编辑:如果您不想删除此特定列,只需显示您要使用的列:

      df=df[['gender','name','age']]
      print(df)
         gender  name  age
      0    male  john   34
      1  female   kim   27
      

      【讨论】:

        猜你喜欢
        • 2016-12-24
        • 1970-01-01
        • 2021-04-28
        • 1970-01-01
        • 2022-11-02
        • 2014-04-16
        • 2020-04-16
        • 2021-04-25
        • 1970-01-01
        相关资源
        最近更新 更多