我在一个文件夹中有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')
您可以将列表理解解压缩到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')
如果使用的是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)