2015-01-12 2 views
24

WindowsではPandas/Pythonを使用してタブ区切りのデータファイルを問題なく読み込んでいます。データファイルには最初の3行にメモが含まれ、その後にヘッダーが続きます。Pandasでタブ区切りのファイルを読む - Windowsでは動作しますがMacでは動作しません

df = pd.read_csv(myfile,sep='\t',skiprows=(0,1,2),header=(0)) 

私はこのファイルを自分のMacで読み込もうとしています。 (MacでPythonを初めて使用したとき)次のエラーが表示されます。

pandas.parser.CParserError: Error tokenizing data. C error: Expected 1 
fields in line 8, saw 39 

虚偽read_csvためerror_bad_lines引数を設定した場合、私は最後の行の終わりまで続く次の情報を、取得します。

Skipping line 8: expected 1 fields, saw 39 
Skipping line 9: expected 1 fields, saw 125 
Skipping line 10: expected 1 fields, saw 125 
Skipping line 11: expected 1 fields, saw 125 
Skipping line 12: expected 1 fields, saw 125 
Skipping line 13: expected 1 fields, saw 125 
Skipping line 14: expected 1 fields, saw 125 
Skipping line 15: expected 1 fields, saw 125 
Skipping line 16: expected 1 fields, saw 125 
Skipping line 17: expected 1 fields, saw 125 
... 

は私がエンコーディング引数の値を指定する必要がありますか? Windowsでファイルを読むのがうまくいくので、私はしてはいけないはずです。

+0

両方のOSで全く同じバージョンのpandasを使用していますか? Macでこの問題を示すサンプルデータを提供できますか? – joris

+0

無関係:Pythonの '(0)'と '(0、)'の違いを理解していますか?注意: '(0)'は '0'、'(0、) 'は' 0 'です。 - コンマはタプル(空のものを除く)を作成します。 – jfs

+0

'df = pd.read_table(myfile、skiprows = [0,1,2]、header = 0)'を試したことがありますか? – pbreach

答えて

26

最大の手掛かりは、行がすべて1行で返されることです。これは、行ターミネータが無視されているか、存在していないことを示します。

csv_readerの行終端文字を指定できます。もしあなたがマックであれば、作成された行は、よりもよりも\rで終わるでしょう。それでもなお、ウィンドウのサスペンダーとベルトのアプローチは\r\nです。

pandas.read_csv(filename, sep='\t', lineterminator='\r') 

コーデックパッケージを使用してすべてのデータを開くこともできます。これにより、ドキュメントの読み込み速度を犠牲にして堅牢性が向上する可能性があります。

import codecs 

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

df = pandas.read_csv(doc, sep='\t') 
+0

コーデックを追加することで助けになりました。それから、同じことをするread_csvのパラメタがあることに気付きました。私はencoding = 'utf-16'を追加して、私の問題を解決しました。 –

関連する問題