2016-07-21 7 views
0

별도의 데이터 프레임에로드 할 파일이 길다. 그러나 판다는 그렇게 선상에서 아무것도하지 않는 것처럼 보입니다. 그래서 나는 이것을하기 위해 고심하고 있습니다. 아래 예제에서 file_map은 실제로 import 될 것이므로 변수와 file_name 사이의 정적 매핑을 가질 수 없습니다. 이 예제는 루프에서 pyhton이 새로운 변수 df를 작성하기 때문에 찾고있는 것을 얻지 못합니다. 어떻게 든 사전에서 이전 변수를 실제로 가리키고 이것을 pd.read_csv가 반환하는 값으로 설정하는 방법이 있습니까?파이썬 팬더 반복에서 기존 데이터 프레임에 할당하기

columns = ['c1', 'c2', 'c3'] 
df_d1 = pd.DataFrame() 
df_d2 = pd.DataFrame() 


file_map = { 
    'data_1.csv': df_d1, 
    'data_2.csv': df_d2, 
} 


for file_name , df in file_map.items(): 

    df = pd.read_csv(path + file_name, 
       header=None, 
       sep=";", 
       names=columns, 
       parse_dates = {'dateTime': ['c1']}, 
       ) 

또는 대체적으로 여기서 내가하는 것보다 일반적으로 이것을 처리하는 더 좋은 방법이 있습니까? 제안

답변

1

환영합니다 다음 연습에서 잘 작동하는 방법이다 :

import glob 
import os 

dataframes = {} 
for fn in glob('/path/to/files/<pattern>.csv'): 
    df = pd.read_csv(fn, ...) 
    dataframes[os.path.basename(fn)] = df 
다음

dataframes이 dataframes의 사전입니다. 실제 파일 목록을 얻으려면 glob을 사용하고 있지만 물론이 목록은 어디서나 올 수 있습니다. os.path.basename/path/to/files 부분이없는 파일 이름 만 반환합니다.

은 또는 당신 같은 dataframe의 모든 데이터는 당신이 또한 할 수 원하는 경우 : 루프의 끝에서

data = None 
for fn in glob('/path/to/files/<pattern>.csv'): 
    df = pd.read_csv(fn, ...) 
    df['source'] = os.path.basename(fn) 
    data = pd.concat([data, df]) if data is not None else df 
다음

data 모든 데이터와 dataframe입니다. 물론 이것은 파일이 동일한 콘텐츠 유형으로 가정합니다. 즉 실제로 하나의 데이터 프레임을 원합니다.

+0

내가 만들 수있는 유일한 추가 사항은'sys.argv'에서 파일 이름을 가져 오는 것입니다. – frist

+0

아, 그래서, 당신의 파일 이름은 당신이 알고 있고 함께 일할 수있는 이름으로 저장됩니까?. 필자는 파일 이름을 반드시 알지 못하거나 파일 이름을 제어하지 못합니다. 그래서 df_1에 매핑하려고했습니다. – chrise

+0

여기에 귀하의 의도를 이해하는지 확실하지 않습니다. 위의 파일 이름에 독립적입니다 ... 만약 당신이 어딘가에서 파일 이름의 목록을 얻으려면'glob (...)'을 실제 이름의리스트로 대체하십시오. – miraculixx

관련 문제