2016-12-16 1 views
1

hereはコアの​​問題に近づきました。私は見ていますが、他の方法で修正されていると思います。Pandas read_csv()がsepと​​quotecharと衝突して予期せぬ列数が発生する

私はそのフィールドを引用符で囲む必要があるため、現在はカンマが必要なフィールドを持つCSVを解析しようとしています。引用符で囲まれた唯一のフィールドです。

デリミタ(sep)はカンマで、現在は引用符(quotechar)の文字列区切り文字を追加しています。

私はこれまでこれを煮詰めました。 sepとquotecharアプリケーションの順序が重要な問題であると私には思えますが、その中でseoteが使用されているquotecharを持つ行は動作しません。

最後の行がコメントアウトされたデータファイル。

$ cat simple.csv 
column1,column2, column3 
one, two,    three 
one, two,    "three" 
#one, "two, two_again", three 
$ 

コード:

df = pd.read_csv(simple_file, sep=',', header=0, comment='#', quotechar='"') 
print df 

出力:

column1 column2     column3 
0  one  two     three 
1  one  two     "three" 

さて、引用符で囲まれた文字列で9月の炭を持っている最後の行を追加します。

データファイル:

$ cat simple.csv 
column1,column2, column3 
one, two,    three 
one, two,    "three" 
one, "two, two_again", three 
$ 

出力は失敗:

pandas/parser.pyx in pandas.parser.raise_parser_error (pandas/parser.c:22649)() 
CParserError: Error tokenizing data. C error: Expected 3 fields in line 4, saw 4 

私は私が最初に各ライン上の引用の区切り文字を使用するためにパンダを強制し、それをやっているとして区切り文字を使用したいと考えています反対。どのように把握することはできません。私が見つけられないパンダにこれを伝える方法はありますか?

+0

はスペースを取り除くを取得またはセパレータの一部としてスペースを定義します。次に、header = Noneを指定するだけでファイルを読むことができます。デフォルトは残りの部分を処理します。 – pvg

答えて

0

パンダCSVリーダーは、区切り記号が厳密に '、'ですが、データファイルの区切り文字としてもスペースを使用しているため、混乱します。セパレータを変更するか、データを修正してください。

column1,column2, column3 
one,two,three 
one,two,"three" 
one,"two, two_again",three 

などのデータを使用すると、以下の

import pandas as pd 
print(pd.read_csv("data.csv", header=None)) 

     0    1   2 
0 column1   column2 column3 
1  one    two  three 
2  one    two  three 
3  one two, two_again  three 
+0

そして、私はこの小さなテストデータファイルを作成すると悪化したようです。私はパンダがセパレータの周りの空白を無視するほどスマートであると思ったが、セパレータが何であるか正確にそれを語った。現時点では私の指先でオリジナルを持っていないが、私のテストケースでスペースをなくすことで、期待どおりに動作するようになる。 –

+0

自分のコメントを編集できません。私自身の質問で自分のコメントを編集することはできませんか? –

+0

@KevinM Pandaはあなたが言ったことを正確に行うのに十分なほどスマートでした。セパレータがカンマのみの場合、コンマの後のスペースは次のアイテムの一部です。突然、アイテムの真ん中に引用符があり、それは意味をなさない。そして余分なセパレータをつける。パーサ、感覚的に、barfs。あなたは簡単に区切り記号として正規表現を与えることができますが、それはCパーサーではなくPythonを使用することを意味しますが、これは遅くなりますが、あなたのケースでは関係がないかもしれません。 – pvg

関連する問題