데이터 분석을 하다보면 여러개의 csv, excel 파일 등을 한번에 여러개의 변수로 불러와야 하는 일이 생긴다.


import glob
import pandas as pd


폴더에 있는 파일을 쉽게 불러오기 위해 glob를 import 해준다.


glob.glob("*.csv")
['test0.csv',
 'test1.csv',
 'test2.csv',
 'test3.csv',
 'test4.csv',
 'test5.csv',
 'test6.csv',
 'test7.csv',
 'test8.csv']


jupyter notebook 파일이 있는 폴더에는 총 9개의 csv파일이 있다.


files = glob.glob("*.csv")
files
['test0.csv',
 'test1.csv',
 'test2.csv',
 'test3.csv',
 'test4.csv',
 'test5.csv',
 'test6.csv',
 'test7.csv',
 'test8.csv']


files에 csv 파일명 list를 담아준다.


df = pd.read_csv(files[0])
df.head()
survived pclass name sex age sibsp parch ticket fare cabin embarked
0 0 3 Klasen, Mr. Klas Albin male 18.0 1 1 350404 7.8542 NaN S
1 1 1 Compton, Miss. Sara Rebecca female 39.0 1 1 PC 17756 83.1583 E49 C
2 1 3 Moor, Master. Meier male 6.0 0 1 392096 12.4750 E121 S
3 1 1 Homer, Mr. Harry ("Mr E Haven") male 35.0 0 0 111426 26.5500 NaN C
4 0 3 Toufik, Mr. Nakli male NaN 0 0 2641 7.2292 NaN C


pandas의 read_csv를 활용하여 csv파일을 dataframe으로 쉽게 불러 올 수 있다.



9개의 파일을 모두 불러와 보자.


df_0 = pd.read_csv(files[0])
df_1 = pd.read_csv(files[1])
df_2 = pd.read_csv(files[2])
df_3 = pd.read_csv(files[3])
df_4 = pd.read_csv(files[4])
df_5 = pd.read_csv(files[5])
df_6 = pd.read_csv(files[6])
df_7 = pd.read_csv(files[7])
df_8 = pd.read_csv(files[8])


변수를 하나씩 지정해주고 파일을 하나씩 각 변수에 담을 수는 있지만 귀찮은 일이다.



for문을 사용하면 한번에 여러개 변수에 각 csv 파일을 담을 수 있을 것 같아 보인다.


for i in range(len(files)):
    str(df) + "_" + str(i) = pd.read_csv(files[0])

  File "<ipython-input-11-26d61a527bfa>", line 2
    df + "_" + str(i) = pd.read_csv(files[i])
    ^
SyntaxError: cannot assign to operator

for문으로 변수명을 바꾸면서 파일을 불러와 보려 했지만 위의 코드를 그대로 실행하면 오류가 난다.

여러개의 변수를 for문을 활용하여 만들어 주기 위해서는 for문과 함께 globals를 활용할 수 있다.



for i in range(len(files)):
    globals()['df'+'_'+str(i)] = pd.read_csv(files[i])

globals를 활용하면 여러개의 변수에 DataFrame을 쉽게 담을 수 있다.



df_0.head()
survived pclass name sex age sibsp parch ticket fare cabin embarked
0 0 3 Klasen, Mr. Klas Albin male 18.0 1 1 350404 7.8542 NaN S
1 1 1 Compton, Miss. Sara Rebecca female 39.0 1 1 PC 17756 83.1583 E49 C
2 1 3 Moor, Master. Meier male 6.0 0 1 392096 12.4750 E121 S
3 1 1 Homer, Mr. Harry ("Mr E Haven") male 35.0 0 0 111426 26.5500 NaN C
4 0 3 Toufik, Mr. Nakli male NaN 0 0 2641 7.2292 NaN C
df_2.head()
pclass name sex age sibsp parch ticket fare cabin embarked
0 3 Klasen, Mr. Klas Albin male 18.0 1 1 350404 7.8542 NaN S
1 1 Compton, Miss. Sara Rebecca female 39.0 1 1 PC 17756 83.1583 E49 C
2 3 Moor, Master. Meier male 6.0 0 1 392096 12.4750 E121 S
3 1 Homer, Mr. Harry ("Mr E Haven") male 35.0 0 0 111426 26.5500 NaN C
4 3 Toufik, Mr. Nakli male NaN 0 0 2641 7.2292 NaN C
df_7
pclass name sex age sibsp parch ticket fare cabin embarked
0 3 Klasen, Mr. Klas Albin male 18.0 1 1 350404 7.8542 NaN S
1 1 Compton, Miss. Sara Rebecca female 39.0 1 1 PC 17756 83.1583 E49 C
2 3 Moor, Master. Meier male 6.0 0 1 392096 12.4750 E121 S
3 1 Homer, Mr. Harry ("Mr E Haven") male 35.0 0 0 111426 26.5500 NaN C
4 3 Toufik, Mr. Nakli male NaN 0 0 2641 7.2292 NaN C
5 2 Herman, Mrs. Samuel (Jane Laver) female 48.0 1 2 220845 65.0000 NaN S
6 3 Gheorgheff, Mr. Stanio male NaN 0 0 349254 7.8958 NaN C
7 3 Vander Cruyssen, Mr. Victor male 47.0 0 0 345765 9.0000 NaN S
8 1 Isham, Miss. Ann Elizabeth female 50.0 0 0 PC 17595 28.7125 C49 C
9 3 Lefebre, Miss. Ida female NaN 3 1 4133 25.4667 NaN S

변수들에 DataFrame이 잘 입력된 것을 볼 수 있다.

카테고리:

업데이트:

댓글남기기