Добавление имен столбцов dataframe на основе имени файла после объединения с помощью Glob - PullRequest
0 голосов
/ 17 января 2020

У меня есть файлы Excel в папке, все в одном формате с данными для всех стран мира на листе «Набор данных2» в каждом файле.

Я слил все файлы в один, используя 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')

Ответы [ 2 ]

2 голосов
/ 17 января 2020

Вы можете распаковать понимание списка в for-l oop и добавить дополнительный столбец к каждому файлу данных, примерно так:

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 голосов
/ 17 января 2020

, если вы используете os модуль, попробуйте path.basename и добавьте его к аргументу ключа в concat:

import glob import os import pandas как 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, это добавит ключи к заголовку, поэтому, возможно, вам захочется сначала прочитать отрывки и добавить их в список, например:

dfs = []
for file in all_filenames:
    df = pd.read_excel(file)
    df['source'] = os.path.basename(file)
    dfs.append(df)
...