【问题标题】:How to rename columns while reading multiple files using pandas如何在使用熊猫读取多个文件时重命名列
【发布时间】:2021-06-24 17:01:29
【问题描述】:

我有两个数据框(用于 excel 文件),下面的列

文件 1- 列

person_ID   Test_CODE   REGISTRATION_DATE   subject_CD   subject_DESCRIPTION    subject_TYPE

文件 2- 列

person_ID   Test_CODE   REGISTRATION_DATE   subject_Code subject_DESCRIPTION    subject_Indicator

但是,subject_CDsubject_Code 列的含义相同。同样,subject_TYPEsubject_Indicator 的含义相同。所以,我想在阅读 excel 文件时重命名它们

我尝试了以下方法,但它不起作用

dfs = []       
for f in files:
    df = pd.read_excel(f, sep=",",low_memory=False)
    print(df.columns)
    df1 = df[df.columns.intersection(['person_ID','Test_CODE','REGISTRATION_DATE','subject_CD','subject_DESCRIPTION','subject_TYPE'])].rename(columns={'subject_TYPE':'subject_Indicator','subject_CD':'subject_Code'})
    dfs.append(df1)

由于我想追加/合并这两个文件,我希望最终数据框中的列名如下所示

person_ID   Test_CODE   REGISTRATION_DATE   subject_Code subject_DESCRIPTION subject_Indicator

可以帮我解决这个问题吗?

【问题讨论】:

  • 请发布您的预期输出。
  • @MayankPorwal - 更新了最终数据框中预期的列名

标签: python pandas dataframe numpy rename


【解决方案1】:

如果您想保留读取的第一个文件的列,您可以执行以下操作,存储第一次迭代的列并将该列分配给其余文件:

dfs = []       
for e,f in enumerate(files):
    df = pd.read_excel(f)
    print(df.columns)
    if e == 0:
        col = df.columns
    df.columns=col
    dfs.append(df)


Index(['person_ID', 'Test_CODE', 'REGISTRATION_DATE', 'subject_CD',
       'subject_DESCRIPTION', 'subject_TYPE'],
      dtype='object')
Index(['person_ID', 'Test_CODE', 'REGISTRATION_DATE', 'subject_Code',
       'subject_DESCRIPTION', 'subject_Indicator'],
      dtype='object')

[df.columns for df in dfs] #pd.concat(dfs)

[Index(['person_ID', 'Test_CODE', 'REGISTRATION_DATE', 'subject_CD',
        'subject_DESCRIPTION', 'subject_TYPE'],
       dtype='object'),
 Index(['person_ID', 'Test_CODE', 'REGISTRATION_DATE', 'subject_CD',
        'subject_DESCRIPTION', 'subject_TYPE'],
       dtype='object')]

【讨论】:

    【解决方案2】:

    从特定的 df 重命名 2 列:

     df.rename({"subject_CD": "subject_Code", "subject_TYPE": "subject_Indicator"}, axis='columns', inplace =True) 
    

    您还可以在同一列上连接 df1 和 df2:

    frames = [df1, df2]
    result = pd.concat(frames)
    

    【讨论】:

    • 谢谢,点赞。但是当我读取第二个文件(循环中)时,它不会有subject_CD 列,对吗?那不会抛出错误吗?
    • @piotr - 如果数据框中没有特定列,您的意思是建议 df.rename 将无效。它不会抛出任何错误,只是切换到下一行执行。我说得对吗>
    • 对于 concat 数据框 - 它们应该具有相同的列 - 如果 df 不包含列 - 可以添加 NAN 的值 - 或从其他列中删除
    • @TheGreat - 基于文档 - 你可以通过:errors='ignore' - 参数pandas.pydata.org/pandas-docs/stable/reference/api/…
    • @TheGreat 为什么不自己尝试一下呢?我刚刚在一个随机 DataFrame 上尝试过,没有错误,也没有发出警告。
    猜你喜欢
    • 2018-12-03
    • 2022-11-21
    • 2021-09-23
    • 2021-08-15
    • 2022-01-04
    • 2018-06-03
    • 2017-03-20
    • 2021-06-14
    相关资源
    最近更新 更多