2

I have five files under a directory 'G:\files' namely a.csv, b.csv, c.csv, d.csv and e.csv, I want to create the different datafrmes for all the files.

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

I am not getting any error in the for loop but, when I tried to print dataframe getting NameError. Please help

Karl Knechtel
  • 62,466
  • 11
  • 102
  • 153
Shiva
  • 51
  • 6

2 Answers2

2

Better is create dictionary of DataFrames:

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'))}

Or:

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

And for each DataFrame select dict by keys:

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

What you need is possible, but not recommended:

for i, j in enumerate(os.listdir(r'G:\files')):
    globals()['df' + str(i)] = pd.read_csv(j)
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252
0

From this answer... Instead of enumerating, save each csv file and unique variable name to a dictionary.

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

Output:

<class 'pandas.core.frame.DataFrame'>
MehmedB
  • 1,059
  • 1
  • 16
  • 42
  • I've just realized @jezral 's [answer](https://stackoverflow.com/a/55789124/10183880) is a well-explained version of mine. – MehmedB Apr 22 '19 at 11:36