2016-08-23 2 views
1

이것은 내 처음으로 팬더에서 일하는 것으로 나의 무지를 용서합니다. 내 요구 사항은 S3에서 Ec2로 파일을 다운로드하고 dat 파일을 데이터 프레임에 저장하는 것입니다. 이 데이터가 어떤 인코딩을 갖고있는 것 같다하지 않았거나 그래서 난 dataframe에서 세 디유 및 저장 등의 구분으로 read_Csv을 사용하기로 결정으로 내 입력 파일의 데이터가데이터 프레임의 열로 분할되지 않는 cedilla로 구분 된 * .dat 파일의 pandas read_csv

1Ç70Ç23929Ç4341Ç1111Ç0Ç0Ç1ÇAAÇ012ÇFillerÇ 
1Ç75Ç45555Ç4324Ç2222Ç0Ç0Ç1ÇAAÇ011ÇFillerÇ 
1Ç76Ç23957Ç4334Ç3333Ç0Ç0Ç1ÇAAÇ011ÇFillerÇ 
1Ç72Ç47776Ç4344Ç4444Ç0Ç0Ç1ÇABÇ014ÇFillerÇ 
1Ç73Ç88880Ç4354Ç4444Ç0Ç0Ç1ÇCDÇ011ÇFillerÇ 
1Ç74Ç99991Ç4364Ç5555Ç0Ç0Ç1ÇEEÇ014ÇFillerÇ 

을 모습이다.

iFldDelim = 'Ç' 
tf = pandas.read_csv(itextfile, iFldDelim, nrows = 5,header=None) 

하지만 어떤 이유로 인해 동일한 것을 인식하지 못하고 하나의 열에 데이터를 넣습니다.

         0 
0 1Ç70Ç23929Ç4341Ç1111Ç0Ç0Ç1ÇAAÇ012ÇFi... 
1 1Ç75Ç45555Ç4324Ç2222Ç0Ç0Ç1ÇAAÇ011ÇFi... 
2 1Ç76Ç23957Ç4334Ç3333Ç0Ç0Ç1ÇAAÇ011ÇFi... 
3 1Ç72Ç47776Ç4344Ç4444Ç0Ç0Ç1ÇABÇ014ÇFi... 
4 1Ç73Ç88880Ç4354Ç4444Ç0Ç0Ç1ÇCDÇ011ÇFi... 

파일이 ASCII처럼 보이고 인코딩되지 않았습니다. 인코딩을 UTF-8 및 UTF-16으로 사용하고 Unicode 값을 구분 기호로 사용하려고 시도했지만 작동하지 않습니다. 또한 세 딜라 대신 'F'로 구분 기호를 하드 코드하고 코드 자체가 일부 암호화/인코딩을 가질 수 있다고 생각하는 코드를 실행하려고했습니다. 하지만 그건 사실이 아니야, 나는 'F'로 구분 된 출력을 얻었습니다.

구분 기호가 'F'인 경우.

        0  1 
0 1Ç70Ç23929Ç4341Ç1111Ç0Ç0Ç1ÇAAÇ012Ç illerÇ 
1 1Ç75Ç45555Ç4324Ç2222Ç0Ç0Ç1ÇAAÇ011Ç illerÇ 
2 1Ç76Ç23957Ç4334Ç3333Ç0Ç0Ç1ÇAAÇ011Ç illerÇ 
3 1Ç72Ç47776Ç4344Ç4444Ç0Ç0Ç1ÇABÇ014Ç illerÇ 
4 1Ç73Ç88880Ç4354Ç4444Ç0Ç0Ç1ÇCDÇ011Ç illerÇ 

파일은 일반적으로 거대한 하나이며이 파일은 오랜 시간 실행됩니다. 그래서 나는 UTF-8 코덱을 사용하여 파일을 인코딩 한 다음 데이터 프레임 넣을 현명한 옵션인지 잘 모르겠습니다.

나는 수동으로 세 딜라로 구분 된 파일을 만들려고했는데 같은 명령을 통과했을 때 모두 잘 동작했다. 나는 여기서 잘못된 것이 무엇인지 알 수 없다. 인코딩 된 경우 알아낼 수있는 방법이 있습니까?

모든 조언을 크게 듣습니다.

덕분에, VB

Edchum 조언을 채택, 난

#file location 
dataPath = "C:/Users/Documents/Pytest/" 
itextfile = join(dataPath,'sample.dat') 

fb = open(itextfile, 'r') 
data = fb.read() 
print(data) 
tf=pandas.read_csv(StringIO(data), sep='Ç', header=None) 
#tf=pandas.read_csv(StringIO(data), sep='\Ç', header=None) 
print(tf) 

데이터는

1Ç71Ç23929Ç44Ç5685Ç0Ç0Ç1ÇaaÇ012ÇFillerÇ 
1Ç72Ç23953Ç40Ç3319Ç0Ç0Ç1ÇbbÇ011ÇFillerÇ 
1Ç73Ç23957Ç43Ç7323Ç0Ç0Ç1ÇccÇ011ÇFillerÇ 
1Ç74Ç24006Ç41Ç6938Ç0Ç0Ç1ÇbbÇ014ÇFillerÇ 
1Ç75Ç24140Ç45Ç0518Ç0Ç0Ç1ÇddÇ011ÇFillerÇ 

Output 

    0 1  2 3  4 5 6 7 8 9  10 11 
0 1 71 23929 44 5685 0 0 1 aa 12 Filler NaN 
1 1 72 23953 40 3319 0 0 1 bb 11 Filler NaN 
2 1 73 23957 43 7323 0 0 1 cc 11 Filler NaN 

는 그래서 9월 = '를 사용하여 파일에서 아래와 같이 나온, 아래의 사용 sep = '\ Ç'대신 '‡'을 사용했습니다. 내가 스크립트를 실행할 때 육안으로 (왜 내가 sample.dat 파일을 열 때) 코즈하는지 세드밀 기호로 구분 된 것처럼 보이는 이유는 확실하지 않습니다.

외부에 pandas.read_csv (StringIO) 명령을 읽지 않고 텍스트 파일을 전달하는 방법은 무엇입니까? Dataframe에 읽고 읽은 행의 수를 제한하고 싶었 기 때문에이 질문을드립니다. 나가 처음 몇 줄만 가지고 싶으면 나가 Totrows를 추가하고 최후에 나는 skiprows를 사용했다. 수백만 행의 거대한 파일을 처리하는 방법은 최소한의 시간이 소요됩니다. 이것이 가능하지 않다면 for 루프를 for 루프로 사용합니다. for 루프없이 수행 할 수있는 방법이 있는지 확인하고 싶었습니다.

감사합니다, VB

+0

흠, 당신은'pd.read_csv을 시도 할 수는 (itextfile 9 월 = R '\ C', NROWS = 5, 헤더 = 없음)'이'가 원하는 나를 위해 나를 – EdChum

답변

0

이 나를 위해 작동하기 때문에 sep='\Ç'을 전달하십시오 :

In [35]: 
import pandas as pd 
import io 
t="""1Ç70Ç23929Ç4341Ç1111Ç0Ç0Ç1ÇAAÇ012ÇFillerÇ 
1Ç75Ç45555Ç4324Ç2222Ç0Ç0Ç1ÇAAÇ011ÇFillerÇ 
1Ç76Ç23957Ç4334Ç3333Ç0Ç0Ç1ÇAAÇ011ÇFillerÇ 
1Ç72Ç47776Ç4344Ç4444Ç0Ç0Ç1ÇABÇ014ÇFillerÇ 
1Ç73Ç88880Ç4354Ç4444Ç0Ç0Ç1ÇCDÇ011ÇFillerÇ 
1Ç74Ç99991Ç4364Ç5555Ç0Ç0Ç1ÇEEÇ014ÇFillerÇ""" 
pd.read_csv(io.StringIO(t), sep='\Ç', header=None) 

Out[35]: 

    0 1  2  3  4 5 6 7 8 9  10 11 
0 1 70 23929 4341 1111 0 0 1 AA 12 Filler NaN 
1 1 75 45555 4324 2222 0 0 1 AA 11 Filler NaN 
2 1 76 23957 4334 3333 0 0 1 AA 11 Filler NaN 
3 1 72 47776 4344 4444 0 0 1 AB 14 Filler NaN 
4 1 73 88880 4354 4444 0 0 1 CD 11 Filler NaN 
5 1 74 99991 4364 5555 0 0 1 EE 14 Filler NaN 
+0

작동 engine = 'python ''도 경고 때문에. – jezrael

+0

@jezrael 비표준/지원되지 않는 분리 기호는'c' 엔진에서 작동하지 않으므로'python'으로 되돌아갑니다. – EdChum

+0

예, 경고가 있습니다. 또한 경고를 받았습니까? – jezrael

0

표준 사례로서 당신이 코덱 패키지를 사용하여 문서를 열 수 있습니다.이렇게하면 인코딩 (대부분의 경우 UTF-16)을 지정할 수 있으며 코덱 패키지는 줄 종결 자 및 인코딩과 같은 항목을 해독하는 데 매우 유용합니다.

Reading tab-delimited file with Pandas - works on Windows, but not on Mac

import codecs 

doc = codecs.open('document','rU','UTF-16') (open for reading with "universal" type set) 

df = pandas.csv_read(doc, sep='Ç', nrows=Totrows, header=Skiprows) 
관련 문제