2014-01-15 25 views
13

私はpython pandasにはかなり新しいですが、to_csv出力を正しく引用するのに問題があります。pandas to_csv出力の引用の問題

import pandas as pd 

text = 'this is "out text"' 
df = pd.DataFrame(index=['1'],columns=['1','2']) 
df.loc['1','1']=123 
df.loc['1','2']=text 
df.to_csv('foo.txt',index=False,header=False) 

出力は次のとおりです。

123,"this is ""out text"""

しかし、私は希望:

123,this is "out text"

は、この権利を取得する方法を誰もが知っていますか?前もって感謝します。

答えて

20

次の例のように、quoting=csv.QUOTE_NONEを渡すことができます。

>>> df.to_csv('foo.txt',index=False,header=False) 
>>> !cat foo.txt 
123,"this is ""out text""" 
>>> import csv 
>>> df.to_csv('foo.txt',index=False,header=False, quoting=csv.QUOTE_NONE) 
>>> !cat foo.txt 
123,this is "out text" 

が、私の経験では、それはより多くの、というよりも少ないを引用する方が良いでしょう。

+2

私はこれを試しましたが、「エラー:エスケープする必要がありますが、エスケープ文字は設定されていません。 また、escapechar = '\\'やescapechar = Noneを追加しようとしましたが、うまくいかないようです... – user3199761

+3

@ user3199761:実際のデータは、貼り付けた例と異なり、必要なものがあるからですコンマで区切られた文字列など、エスケープします。 'a、b、c"、dを出力すると結果を解析できますが、 'a、b、c、d'を書き出した場合の列は何ですか?あなたは分からない。 – DSM

+0

上記の例と同じコードで試してみましたが、エラーが発生しました。私はpandas 0.11.0とpython 2.7.6を使用していますが、これが役立つかどうかはわかりません。 – user3199761

-5

'foo.txt'を書くのとは対照的に、'foo.csv'と書いてください。それが問題を解決しました。 ExcelでCSVファイルを読み込むと、余分な引用符はありません。

+0

Excelと何が関係していますか? – DSM

+0

@DSM:私はOPを知っています、私の答えは、問題を手伝うことを意図したものでした。ただし、ExcelでCSVファイルを開くと引用符が削除されることが分かりました。おそらくExcelのパーサーによるものです。この質問を見ている別の人にとって有益な情報かもしれません。 – ericmjl

+1

実際に引用符は削除されませんが、引用符で囲まれた記号として解釈され、ファイル名を変更すると同じ出力ファイルが生成されます。そして、私たちの中にはExcelを使っていない人もいます。 :^)でも、知っておくと便利かもしれないと思う。 – DSM

12

注:現在、パンダto_string documentationには小さなエラーがあります。

  • quoting : int, Controls whether quotes should be recognized. Values are taken from csv.QUOTE_* values. Acceptable values are 0, 1, 2, and 3 for QUOTE_MINIMAL, QUOTE_ALL, QUOTE_NONE, and QUOTE_NONNUMERIC,
    respectively.

をしかし、これは、CSVがQUOTE_NONEとQUOTE_NONNUMERIC変数を定義する方法反転:それは述べています。

In [13]: import csv 
In [14]: csv.QUOTE_NONE 
Out[14]: 3