2017-10-26 15 views
1

R에는 환경의 이름에 값을 할당하는 assign이라는 함수가 있습니다.Python : 디렉토리를 통해 루핑하고 데이터 프레임 이름으로 파일 이름을 사용하여 각 파일 저장

EG는 : 파이썬에서

assign("Hello", 2) 
> Hello 
[1] 2 

나는 동일한 기능을 수행 할 수없는 것. 나는 처음 시도 :

import numpy as np 
import pandas as pd 
import os 

for file in os.listdir('C:\\Users\\Olivia\\Documents'): 
    if file.endswith(".csv"): 
     os.path.splitext(file)[0] = pd.read_csv('C:\\Users\\Olivia\\Documents\\' + file) 

하지만이 작동하지 않는 파일과 동일한 캐릭터를 만들기 위해 노력하고 볼 수 있습니다. 나는 목록에서 각 데이터 프레임을 얻을 확장자가없는 파일로 이름이 어떻게 지금

import glob 

dl = glob.glob(r'C:\Users\Olivia\Documents\*.csv') 
nl = [] 
for i in dl: 
    pl = i.split(os.sep) 
    name = pl[5][:-4] 
    nl.append(name) 

ddict = {} 

for k, v in zip(nl,dl): 
    ddict[k] = ddict.get(k,"") + v 

dfl = [] 

for k, v in ddict.items(): 
    dfl.append(read_csv(v)) 

을하지만 :

나는 수행하여 목록에있는 모든 파일을 얻을 수 있었다. 목록의 각 데이터 프레임을 파일 목록의 이름으로 할당하는 방법이 있어야합니다.

+0

나는 https://stackoverflow.com/questions/30246620/how-to-create-separate에서 목록을 가지고 -pandas-dataframes-for-each-csv-file-and-give-them- – Olivia

답변

2

솔직히 말하자면 첫 번째 방법으로 올바른 길을 걷고있었습니다. 불행히도, 파이썬은 당신이 이미 시도해 보았던 것처럼 "가변 개수의 변수"를 동적으로 생성하는 옵션을 제공하지 않습니다. 그러나! 사전을 만들고 원하는대로 문자열 키에 데이터 프레임을 할당하십시오. 방법은 다음과 같습니다.

root = 'C:\\Users\\Olivia\\Documents' 

ddict = {} 
for file in os.listdir(root): 
    if file.endswith(".csv"): 
     name = os.path.splitext(file)[0] 
     ddict[name] = pd.read_csv(os.path.join(root, file)) 

DICT 이해 사용이 사전을 구축하는 또 다른 방법 : 지금

ddict = {os.path.splitext(file)[0] : pd.read_csv(os.path.join(root, file)) 
       for file in os.listdir(root) if file.endswith('csv') 
} 

을 하나의 dataframe를 참조주의하기 쉽게

ddict['your_file_name'] 

와 같은 또 다른 일이 , 안전한 파일 파일을 결합하는 방법은 os.path.join입니다. 평범한 것보다 안전합니다 +.


참조

+0

브릴리언트, 그리고 마지막으로 사전에 방법이 있습니다. 모든 것을 개별 객체로 가져 오는 것? 나는 이것이 덜 효율적이고 불필요하다고 생각하지만,하기가 쉽다면 호기심이 많습니다. – Olivia

+0

@Olivia 정말 권장하지 않지만 가능합니다. 'globals(). update (ddict)'를 사용하면 코드 냄새가 나기 때문에 사전에 두는 것이 낫습니다. –

+1

@Olivia'os.path.join'은 구분 기호가 없으면 자동으로 추가합니다. 실제로 문자열에 연결하려는 경우 (파일 하위 경로 결합과 반대),'+'를 사용하십시오. 그렇지 않으면, 하위 경로에 합류하기 위해서는'os.path.join'을 사용하는 것이 좋으며 그것도 휴대용입니다. –