2016-07-29 7 views
1

여러 텍스트 파일이있는 폴더를 열려고하고 각 파일을 자체 데이터 프레임에 넣고 각 데이터 프레임의 이름을 파일 이름으로 지정하려고합니다.데이터 프레임에 폴더 및 텍스트 파일을 열고 파일 이름을 기반으로 데이터 프레임의 이름을 바꾸는 방법은 무엇입니까?

내 코드는 폴더의 5 개 파일을 인식하지만 파일의 데이터를 파일 이름을 기반으로하는 데이터 프레임에 넣지 않습니다. 누군가 이걸하는 방법을 보여줄 수 있습니까?

코드 : PD 수입 pypyodbc

loc = 'D:/filepath to folder with files' 
os.chdir(loc) 
filelist = os.listdir() 
#print (len((pd.concat([pd.read_csv(item, names=[item[:-4]]) for item in filelist],axis=1)))) 

data = [] 
path = loc 
files = [f for f in os.listdir(path) if os.path.isfile(f)] 
for f in files: 
    with open(f,'r') as myfile: 
     data.append(myfile.read()) 

df = pd.DataFrame(data) 
print (df.shape) 

로 수입 OS 수입 팬더는 파일의 데이터가 어떻게 보이는지 미리

-edit- 에 감사 :

0010010000013 1 CITY OF HOUSTON  1.000 
0010020000001 1 CURRENT OWNER  1.000 
0010020000003 1 MILBY CHARLES FAMILY PTNSH  1.000 
0010020000004 1 FEAGIN MICHAEL RYAN TRUST  1.000 
0010020000013 1 BUFFALO BAYOU PARTNERSHIP  1.000 
0010020000015 1 BUFFALO BAYOU PARTNERSHIP  1.000 
0010020000016 1 USRP PAC LP SPAGHETTI WAREHOUSE 1.000 
0010020000023 1 CITY OF HOUSTON  1.000 
0010020000024 1 LUISA MILBY FEAGIN 2007 TRUST  1.000 
0010030000001 1 BUFFALO BAYOU PARTNERSHIP  1.000 

-edit- 최종 답변

dfs = {os.path.basename(f): pd.read_csv(f, sep='\t', header=None,encoding='cp037',error_bad_lines=False) for f in glob.glob('D:/TX/Houston_County/Real_acct_owner/*.txt')} 
+0

txt 파일의 구조는 무엇입니까? 어떻게 데이터 프레임으로 사용 하시겠습니까? 쉼표로 구분 된 값입니까? –

+0

'for' 루프의 본문이 너무 좁습니다. 'data = []'와 데이터 프레임 인스턴스화를 루프에 넣어야합니다. – jbndlr

+0

@JBr 파일의 데이터가 어떻게 편집되는지 확인했습니다. 나는 csv가 아닌 단지 공백으로 데이터를 원합니다. 다시 한번 감사합니다 – RustyShackleford

답변

4

이런 식으로 각각의 키 (= 파일 이름)에 각각의 파일 내용이있는 데이터 프레임이있는 dict을 작성해야합니다. @MaxU 제안한 한 라이너

filedfs = {} 
for f in files: filedfs[f] = pd.read_csv(os.path.join(loc, f)) 

또는 :

dfs = {os.path.basename(f): pd.read_csv(f, delim_whitespace=True, header=None) for f in glob.glob('c:/data/*.csv')} 
+1

은 한 줄짜리입니다 :'dfs = { glob.glob ('c :/data/*. csv')}의 f에 대한 pd.read_csv (f, delim_whitespace = True, header = None) ' – MaxU

+0

@ Maxax가 방금 시도했습니다. 줄 및 인쇄 (len (dfs)) 및 0이라고 말합니다. – RustyShackleford

+0

@jbndlr 또한 줄을 시도했지만 "데이터를 토큰 화하는 중 오류가 발생했습니다. C 오류 : 233 행의 1 필드가 2 인치를 보았습니다. 내가 잘못하고있는 것이 확실하지 않습니다. – RustyShackleford

0

입력 :

0010010000013,1,CITY OF HOUSTON,1.000 
0010020000001,1,CURRENT OWNER,1.000 

번호 :

import os 
import pandas 

loc = 'folder/' 

list_of_df = [] 

for f in os.listdir(loc): 
    if f.endswith(".txt"): 

     df = pandas.read_csv(loc+f, sep = ',', names = ['number', 'count', 'buyer', 'status']) 
     list_of_df.append(df) 

for df in list_of_df: 
    print df 
    print '--' 
+0

나는 그것이 내 데이터에 문제가되어야한다고 생각한다. BC 오류를 얻고있다. "데이터를 토큰으로 만드는 중 오류가 발생했다. C 오류 : 233 행의 1 필드가 예상 됨 2". – RustyShackleford

+0

나는 동의한다 -'sep = ''','sep = ''','sep = '\ t''을 시도했다. 쉼표로 구분 된 데이터를 가져 오는 것이 옵션이라면 이는 쉬운 작업입니다. –

관련 문제