如何将多个原始输入 CSV 与包含名称略有不同的相似列的熊猫合并?

问题描述

我编写了一些代码来组合多个用 Pandas 解释并附加到一个组合 CSV 的 CSV。

我遇到的问题是 CSV 文件由多方(每月)提供,并且通常包含列名称方面的差异,而它们基本上包含相同的信息。例如:

CSV 1 |身份证 |实例编号 | | -------- | -------------- | | 1 | 401421 | | 2 | 420138 |

CSV 2 |身份证 |实例编号 | | -------- | -------------- | | 1 | 482012 | | 2 | 465921 |

这将导致合并文件中有两列,Instance Number 和 Instance NO,除非我事先重命名该列,而想法是在没有事先干预的情况下自动处理所有文件。

应该工作的解决方案是使用 combine_first 或 fillna,但下次可以输入该列,例如实例编号/编号。

既然改进数据交付不是一种选择,那么有没有什么聪明的方法来解决此类问题,而不必写出所有可能的变体并将它们重新映射到一个主要列?

提前致谢!

解决方法

我认为首先您需要有一个包含所有可能名称的字典,或者您可以在获得新名称时快速添加这些名称并重命名列名称。例如

general_dict = { 'SLNO': ['Sl No','SNo']}

col_list = all_df.columns.to_list()
rename_dict = {}

for col in col_list:
    for key,val in general_dict.items():
        if col in val:
            rename_dict[col] = key

            break
all_df.rename(columns=rename_dict,inplace=True)
,

简短的回答是否定的,因为您要求计算机自己思考。但是,您确实有多种选择来处理常见情况。

如果列顺序和/或位置是固定的,您可以使用 header=0,names=['ID','Instance'] 忽略文件中发送的标题并使用已知数据

您还可以生成一个配置文件,将所有可能的错误标头名称映射到正确的标头名称

,

如果所有文件中的列顺序相同,您可以这样尝试,

  1. 首先预定义列
  2. 首先更改所有文件的列名并连接数据帧
data1 = pd.read_csv('data/data1.csv')
data2 = pd.read_csv('data/data2.csv')

data1.columns = ['A','B','C']
data2.columns = ['A','C']

pd.concat([data1,data2],axis=0)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...