使用Glob合并后根据文件名添加数据框列名称

问题描述 投票:0回答:2

我在一个文件夹中有Excel文件,所有文件的格式都相同,并且在每个文件的“ Dataset2”表中包含世界上所有国家的数据。

我已使用glob将所有文件合并为一个文件,但我需要知道每一列来自哪个文件(即哪个国家/地区。

有没有办法做到这一点?

import glob
import os
import pandas as pd

os.chdir("Countries/")
extension = 'xlsx'

all_filenames = [i for i in glob.glob('*.{}'.format(extension))]

combined = pd.concat([pd.read_excel(f, sheet_name='Dataset2') for f in all_filenames ],axis=1, ignore_index=True)

combined.to_excel( "New/combined.xlsx", index=False, encoding='utf-8-sig')

python pandas dataframe merge glob
2个回答
2
投票

您可以将列表理解解压缩到for循环中,并在每个数据文件中添加一个附加列,如下所示:

import glob
import os
import pandas as pd

os.chdir("Countries/")
extension = 'xlsx'

all_filenames = [i for i in glob.glob('*.{}'.format(extension))]

file_list = []
for f in all_filenames:
    data = pd.read_excel(f, sheet_name='Dataset2')
    data['source_file'] = f  # create a column with the name of the file
    file_list.append(data)

combined = pd.concat(file_list, axis=1, ignore_index=True)

combined.to_excel( "New/combined.xlsx", index=False, encoding='utf-8-sig')

0
投票

如果使用的是os模块,请尝试path.basename并将其添加到concat的key参数中:

import glob导入操作系统以pd格式导入熊猫

os.chdir(r"C:\Users\Umar.Hussain\OneDrive - Ricoh Europe PLC\Documents\Excels")
extension = 'xlsx'

all_filenames = [i for i in glob.glob('*.{}'.format(extension))]
names = [os.path.basename(f) for f in all_filenames]

combined = pd.concat([pd.read_excel(f, sheet_name='Sheet1') for f in all_filenames],keys=names,axis=1 )

当您使用axis=1时,会将密钥添加到标题中,因此可能要先阅读Excel并将其添加到类似::>的列表中

dfs = []
for file in all_filenames:
    df = pd.read_excel(file)
    df['source'] = os.path.basename(file)
    dfs.append(df)
© www.soinside.com 2019 - 2024. All rights reserved.