これは初めての私のパンダの作業ですので、私の無知を赦してください。 私の要件は、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
うーん、あなたは 'pd.read_csvを試すことができますが(itextfile、9月= R '\ C'、NROWS = 5、ヘッダ=なし)が'これが 'それは望んでいる私にとっては、私 – EdChum