Невозможно создать кадр данных панд в цикле for - PullRequest
2 голосов
/ 22 апреля 2019

У меня есть пять файлов в каталоге 'G: \ files', а именно a.csv, b.csv, c.csv, d.csv и e.csv, я хочу создать разные datafrmes для всех файлов.

for i, j in enumerate(os.listdir(r'G:\files')):
    df_name = 'df' + str(i)
    df_name = pd.read_csv(j)

Я не получаю никакой ошибки в цикле for, но когда я пытался напечатать фрейм данных, получая NameError.Пожалуйста, помогите

Ответы [ 2 ]

2 голосов
/ 22 апреля 2019

Лучше создать словарь из DataFrame s:

d = {'df' + str(i): pd.read_csv(j) for i, j in enumerate(os.listdir(r'G:\files'))}

import glob

#get files *.csv, thank you anki_91
d = {'df' + str(i): pd.read_csv(j) for i, j in enumerate(glob.glob('G:/files/*.csv'))}

Или:

d = {}
for i, j in enumerate(os.listdir(r'G:\files')):
    d['df' + str(i)] = pd.read_csv(j)

И для каждого DataFrame выберите dict на key s:

print (d['df0'])
print (d['df1'])

То, что вам нужно, возможно, но не рекомендуется :

for i, j in enumerate(os.listdir(r'G:\files')):
    globals()['df' + str(i)] = pd.read_csv(j)
0 голосов
/ 22 апреля 2019

Из этого ответа ... Вместо перечисления сохраните каждый CSV-файл и уникальное имя переменной в словаре.

import os
import pandas as pd
a = {}
k = 0
for file in os.listdir(r'G:\files'):
    df_name = 'df' + str(k)
    df_data = pd.read_csv(file)
    a[df_name] = df_data
    k += 1

print(type(a['df1']))

Выход:

<class 'pandas.core.frame.DataFrame'>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...