2016-08-23 10 views
1

これは初めての私のパンダの作業ですので、私の無知を赦してください。 私の要件は、S3からEc2にファイルをダウンロードし、datファイルをデータフレームに置くことです。これは、データがどのエンコーディングを持っていないようでしたか、私はデータフレーム内セディーユや店舗などの区切り文字でread_Csvを使用することを決めたようpandas read_csvがセディラで区切られた* .datファイルでデータフレームの列に分割されない

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) 

しかし、何らかの理由で同じものを認識せず、データを1つの列に入れます。

         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を使用したとします。数百万行の巨大なファイルを処理するには、最小限の時間がかかります。これが不可能な場合はforcourse 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

の作品エンジン= '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) 
関連する問題