Несколько фреймов данных хранятся в словаре - Python / Pandas

1

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

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

Он работает, если я использую 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). Я застрял

Есть идеи?

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

ура

  • 0
    Привет @notArobot notArobot, добро пожаловать в ТАК. Что вы хотите делать с фреймами данных после их загрузки? Как вы собираетесь их идентифицировать?
  • 0
    Привет @JorgeLavín JorgeLavín, обычный, объединить с некоторыми другими dfs (с информацией о diff), фильтровать, создать некоторые диаграммы и так далее ... Мой план состоит в том, чтобы создать еще один dic, чтобы идентифицировать их позже, не уверенный, имеет ли что-нибудь из этого смысл. ...лол
Теги:
pandas
dataframe

2 ответа

0
Лучший ответ

Можете попробовать

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']

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

0

Вы можете использовать понимание 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, чтобы вы могли обрабатывать поврежденные файлы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню