パンダを使用してcsvファイルを読み取ろうとしていますが、ファイルには、ユーザーが指定したタグで構成され、-、 ""、''、1950年代、16世紀のようなタグを持つTagsという列があります。これらはユーザー提供であるため、誤って入力された特殊文字も多くあります。問題は、pandasread_csvを使用してcsvファイルを開くことができないことです。error:Cparser、データのトークン化エラーが表示されます。誰かがcsvファイルをパンダに読み込むのを手伝ってもらえますか?
11983 次
1 に答える
9
わかった。正しくフォーマットされていないCSVから始めると、次のように読み取ることができません。
>>> !cat unquoted.csv
1950's,xyz.nl/user_003,bad, 123
17th,red,flower,xyz.nl/user_001,good,203
"",xyz.nl/user_239,not very,345
>>> pd.read_csv("unquoted.csv", header=None)
Traceback (most recent call last):
File "<ipython-input-40-7d9aadb2fad5>", line 1, in <module>
pd.read_csv("unquoted.csv", header=None)
[...]
File "parser.pyx", line 1572, in pandas._parser.raise_parser_error (pandas/src/parser.c:17041)
CParserError: Error tokenizing data. C error: Expected 4 fields in line 2, saw 6
最後の3つの列が正常に動作しているという事実を利用して、より良いバージョンを作成できます。
import csv
with open("unquoted.csv", "rb") as infile, open("quoted.csv", "wb") as outfile:
reader = csv.reader(infile)
writer = csv.writer(outfile)
for line in reader:
newline = [','.join(line[:-3])] + line[-3:]
writer.writerow(newline)
を生成します
>>> !cat quoted.csv
1950's,xyz.nl/user_003,bad, 123
"17th,red,flower",xyz.nl/user_001,good,203
,xyz.nl/user_239,not very,345
そしてそれを読むことができます:
>>> pd.read_csv("quoted.csv", header=None)
0 1 2 3
0 1950's xyz.nl/user_003 bad 123
1 17th,red,flower xyz.nl/user_001 good 203
2 NaN xyz.nl/user_239 not very 345
ただし、この問題をソースで修正し、許容できる形式でデータを取得することを検討します。このようなトリックは必要ないはずであり、修復が不可能になるのは非常に簡単だったでしょう。
于 2013-01-27T18:49:51.763 に答える