繁体   English   中英

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

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

我编写了一些代码来组合使用 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']忽略文件中发送的标题并使用已知数据

您还可以生成一个配置文件,将所有可能的错误 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM