Несколько фреймов данных хранятся в словаре - Python / Pandas - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть разные файлы csv и excel для загрузки в pandas, и мне было интересно динамически создать структуру загрузки (пример: df1 = pd.read_csv(xxxxx)), поэтому я зацикливаю файлы и создаю команду и сохраняю их в словаре.

Проблема в том, что словарь хранит значения в виде строки, и оттуда я могу загрузить CSV-файлы и перейти к фрейму данных.

Это работает, если я использую exec и eval, но я ищудля альтернатив.до сих пор: чтобы создать команду.

for i in list1:
     df_dic[calendar.month_abbr[int(i[4:6])]] = ''.join('''df_lst_'''+calendar.month_abbr[(int(i[4:6]))]+''' = pd.read_excel(r'''+"'"+dir1+i+"'"+','+'sheet_name='''''Data'''"'"+')')

, тогда я создаю новый dict только на основе только df_list[X], чтобы манипулировать им позже, но снова он сохраняется как строка.Я пробовал разные подходы (например, ast.literal_eval, который дает мне ValueError: malformed node or string).Я застрял

Есть идеи?

Ценю любую помощь.

Приветствия

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Вы можете использовать слова dict:

import pandas as pd
paths = ['file1.csv', 'file2.csv']
dfs = {p: pd.read_csv(p) for p in paths}

Если вы также хотите прочитать файлы Excel той же командой, вы можете использовать решение

paths = ['file1.csv', 'file2.csv', 'excel_file.xls']
dfs = {p: pd.read_csv(p) if p.endswith('.csv') else pd.read_excel(p) for p in paths}

@ jorge с цикломПреимущество заключается в том, что вы можете обернуть каждый read_csv в блок try-catch, чтобы вы могли обрабатывать поврежденные файлы.

0 голосов
/ 21 сентября 2018

Можете ли вы попробовать это

def load_csvs(*paths):
    dfs = {}
    for path in paths:
        dfs[path] = pd.read_csv(path)
    return dfs

if __name__ == '__main__':
    paths = ['foo.csv', 'bar.csv']
    dfs = load_csvs(paths)
    # Access the foo.csv dataframe as foo_df
    foo_df = dfs['foo.csv']

Вы можете получить доступ к фреймам данных по их путям, чтобы манипулировать ими и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...