Pandas - 在文件夹中导入 CSV 文件,如果包含字符串则更改列名,连接到一个数据框中

Pandas - import CSV files in folder, change column name if it contains a string, concat into one dataframe

我有一个包含大约 40 个 CSV 文件的文件夹,其中包含每月的数据。我想将所有这些组合在一起,但是我在这些 CSV 文件中有一列表示为 'implementationstatus' 或 'implementation'。当我尝试使用 Pandas 进行连接时,显然这是一个问题。我想在导入每个 CSV 文件时将 'implementationstatus' 基本上更改为 'implementation'。我可以 运行 每个 CSV 文件的循环,更改列名称,导出它,然后 运行 我的代码再次更改所有内容,但这似乎容易出错或发生意外事情。

相反,我只想导入所有 CSV,将列名称 'implementationstatus' 更改为 'implementation'(如果适用),然后连接成一个数据框。我的代码如下。

import pandas as pd
import os
import glob

path = 'c:/mydata'

filepaths = [f for f in os.listdir(".") if f.endswith('.csv')]
df = pd.concat(map(pd.read_csv, filepaths),join='inner', ignore_index=True)
df.columns = df.columns.str.replace('implementationstatus', 'implementation') # I know this doesn't work, but I am trying to demonstrate what I want to do

如果要更改列名,请尝试以下操作:

import glob
import pandas as pd

filenames = glob.glob('c:/mydata/*.csv')
all_data = []

for file in filenames:
    df = pd.read_csv(file)
    if 'implementationstatus' in df.columns:
      df = df.rename(columns={'implementationstatus':'implementation'})

    all_data.append(df)
df_all = pd.concat(all_data, axis=0)

您可以使用 header 和 pd.read_csv 函数中的名称参数的组合来解决它。

您必须将包含 csv 文件中所有列名称的列表传递给 names。这将使您能够标准化所有名称。

来自 pandas 文档: 名称:array-like,可选 要使用的列名列表。如果文件包含 header 行,则应显式传递 header=0 以覆盖列名。此列表中不允许重复。