Python 在pandas中基于csv文件名重命名列

Python 在pandas中基于csv文件名重命名列,python,pandas,csv,Python,Pandas,Csv,假设我正在读取N个csv文件并将它们合并到一个数据帧中,如: dfs = [pd.read_csv(f) for f in list_of_files] df = pd.concat(dfs, axis=1) 如何重命名每个文件中的列,使其包含基于文件名的后缀 例如,如果文件f1和f2具有以下内容: f1: f2: 然后,上面的列式concat生成: A B 1 4 2 5 3 6 。。。但我想: A_f1 B_f2 1 4 2 5 3 6

假设我正在读取N个csv文件并将它们合并到一个数据帧中,如:

dfs = [pd.read_csv(f) for f in list_of_files]
df = pd.concat(dfs, axis=1)
如何重命名每个文件中的列,使其包含基于文件名的后缀

例如,如果文件f1和f2具有以下内容:

f1:

f2:

然后,上面的列式
concat
生成:

A  B
1  4
2  5
3  6
。。。但我想:

A_f1  B_f2
   1     4
   2     5
   3     6

将dfs更改为
dict

dfs = {'f'+str(i+1) : pd.read_csv(f) for i,f in enumerate(list_of_files)}
然后使用
cancat

s=pd.concat(dfs,1)
s.columns=s.columns.map('{0[1]}_{0[0]}'.format) 
s
Out[311]: 
   A_f1  B_f2
0     1     4
1     2     5
2     3     6
您可以使用以下选项:


在使用
pd.concat
之前,您可以将
后缀添加到df中:

lst_dfs = []

for file in list_of_files:
    df = pd.read_csv(file)
    df = df.add_suffix(f'_{file}')
    lst_dfs.append(df)

df_all = pd.concat(lst_dfs, axis=1)
编辑

带有两个csv文件的小测试

list_of_files = ['table1.csv', 'table2.csv']

lst_dfs = []

for file in list_of_files:
    df = pd.read_csv(file, sep='|')
    df = df.add_suffix(f'_{file}')
    lst_dfs.append(df)

df_all = pd.concat(lst_dfs, axis=1)

#Optional to remove the filename extension
df_all.columns = df_all.columns.str.replace('.csv', '')

print(df_all)
  key_table1  value_table1 key_table2  value_table2
0          A     -0.323896          B      0.050969
1          B      0.073764          D     -0.228590
2          C     -0.798652          E     -2.160319
3          D      0.970627          F     -0.213936
dfs = [pd.read_csv(f).add_suffix('-' + str(f)) for f in list_of_files]
lst_dfs = []

for file in list_of_files:
    df = pd.read_csv(file)
    df = df.add_suffix(f'_{file}')
    lst_dfs.append(df)

df_all = pd.concat(lst_dfs, axis=1)
list_of_files = ['table1.csv', 'table2.csv']

lst_dfs = []

for file in list_of_files:
    df = pd.read_csv(file, sep='|')
    df = df.add_suffix(f'_{file}')
    lst_dfs.append(df)

df_all = pd.concat(lst_dfs, axis=1)

#Optional to remove the filename extension
df_all.columns = df_all.columns.str.replace('.csv', '')

print(df_all)
  key_table1  value_table1 key_table2  value_table2
0          A     -0.323896          B      0.050969
1          B      0.073764          D     -0.228590
2          C     -0.798652          E     -2.160319
3          D      0.970627          F     -0.213936