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

How to merge multiple raw input CSV's with pandas containing similar columns with slightly different names?

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

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

CSV 1 |编号 |实例编号 | | ------ | -------------- | | 1 | 401421 | | 2 | 420138 |

CSV 2 |编号 |实例编号 | | ------ | -------------- | | 1 | 482012 | | 2 | 465921 |

这将导致组合文件中有两列,实例编号和实例编号,除非我事先重命名该列,而我的想法是自动处理所有文件而无需事先干预。

应该有效的解决方案是使用 combine_first 或 fillna,但下次可能会输入该列,例如实例 No/number.

既然改进数据传输不是一种选择,有没有什么聪明的方法可以解决这样的问题,而不必写出所有可能的变化并将它们重新映射到一个前导列?

提前致谢!

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

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)

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

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

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

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

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

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

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