1. ホーム
  2. python

[解決済み] Pandasでタブ区切りファイルを読む - Windowsでは動作するが、Macでは動作しない

2022-08-03 18:39:53

質問

Windowsでタブ区切りのデータファイルをPandas/Pythonで問題なく読み込んでいます。データファイルは、最初の3行にノートを含み、その後ヘッダが続きます。

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

を設定すると error_bad_lines の引数に read_csv から 偽の を指定すると、次のような情報が表示され、最後の行の終わりまで続きます。

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 上でファイルの読み取りがうまくいくので、指定する必要はないように思えますが。

どのように解決するのですか?

最大のヒントは、行がすべて1行で返されることです。これは、行の終端記号が無視されるか、または存在しないことを示しています。

csv_reader には、行の終端記号を指定することができます。mac を使用している場合、作成される行の末尾は \r で終わるのではなく、Linux 標準の \n というウィンドウズのサスペンダーとベルトのようなアプローチよりも \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')