Python, Pandas, объединяющий данные из определенных листов с количеством документов Excel - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь создать серию функций для извлечения данных из определенных листов с количеством документов Excel в один фрейм данных.

То, что я имею до сих пор:

import os
import glob
os.chdir(r'path')
FileList = glob.glob('*.xlsm')
print(FileList)

for file in FileList: 
    df = extract_account(file, '2016')
    df = df.dropna()
    df_combined = pd.concat([df])

Однако, когда я звоню df_combined, он возвращает только один дф (я ожидаю минимум 5 в моем тесте). extract_account(file_name, sheet_name) - это созданная мной функция, которая извлекает нужные мне данные для одного файла и возвращает объект pandas.core.frame.DataFrame. Моим следующим шагом было бы передать этой функции список лет, из которых можно извлечь.

1 Ответ

0 голосов
/ 09 ноября 2018

Здесь необходимо создать список DataFrames, а затем concat вместе, также параметр ignore_index=True предназначен для избежания дублирования значений индекса в конечном DataFrame:

dfs = []
for file in FileList: 
    df = extract_account(file, '2016')
    df = df.dropna()
    dfs.append(df)
df_combined = pd.concat(dfs, ignore_index=True)

Если хотите также цикл по годам:

years = range(2016, 2020)

dfs = []
for file in FileList: 
    for year in years:
        df = extract_account(file, str(year))
        df = df.dropna()
        dfs.append(df)

df_combined = pd.concat(dfs, ignore_index=True)

Решение с пониманием списка:

dfs = [extract_account(file, '2016').dropna() for file in FileList]
df_combined = pd.concat(dfs, ignore_index=True)

dfs = [extract_account(file, str(y)).dropna() for file in FileList for y in years]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...