2014-01-15 49 views
13

我對python熊貓相當陌生,但無法正確獲取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 ='\\'或escapechar = None,但似乎不起作用... – user3199761

+3

@ user3199761:這是因爲您的真實數據 - 與您粘貼的示例不同 - 具有您需要的東西轉義,如帶逗號的字符串。如果輸出「a」,b,c「,d」,則可以解析結果,但如果寫出「a,b,c,d」,則列是什麼?你不知道。 – DSM

+0

我曾嘗試使用上述相同示例的代碼,但遇到了錯誤。我正在使用熊貓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

注意:目前在Pandas 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