pandas to_csv输出报价问题

时间:2014-01-15 20:01:09

标签: python file-io pandas

我对python 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,“这是”“文字”“”

但我想:

  

123,这是“out text”

有谁知道如何做到这一点?

5 个答案:

答案 0 :(得分:40)

您可以传递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"

但根据我的经验,最好引用更多,而不是更少。

答案 1 :(得分:17)

注意:Pandas to_string documentation目前存在一个小错误。它说:

  
      
  • 引用:int,控制是否应该识别引号。值取自csv.QUOTE_ *值。可接受的值为0,1,2和   3表示QUOTE_MINIMAL,QUOTE_ALL,QUOTE_NONE和QUOTE_NONNUMERIC,
      分别
  •   

但是这反转了csv定义QUOTE_NONE和QUOTE_NONNUMERIC变量的方式。

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

答案 2 :(得分:6)

要使用quoting=csv.QUOTE_NONE,您需要设置escapechar,例如

# Create a tab-separated file with quotes
$ echo abc$'\t'defg$'\t'$'"xyz"' > in.tsv
$ cat in.tsv
abc defg    "xyz"

# Gotcha the quotes disappears in `"..."`
$ python3
>>> import pandas as pd
>>> import csv
>>> df = pd.read("in.tsv", sep="\t")
>>> df = pd.read_csv("in.tsv", sep="\t")
>>> df
Empty DataFrame
Columns: [abc, defg, xyz]
Index: []


# When reading in pandas, to read the `"..."` quotes,
# you have to explicitly say there's no `quotechar`
>>> df = pd.read_csv("in.tsv", sep="\t", quotechar='\0')
>>> df
Empty DataFrame
Columns: [abc, defg, "xyz"]
Index: []

# To print out without the quotes.
>> df.to_csv("out.tsv", , sep="\t", quoting=csv.QUOTE_NONE, quotechar="",  escapechar="\\")

答案 3 :(得分:0)

要在不使用转义符的情况下使用:

在df中用单个低9引号字符,替换逗号 (Unicode:U + 002C)( Unicode:U + 201A)

在此之后,您可以简单地使用:

import csv df.to_csv('foo.txt', index=False, header=False, quoting=csv.QUOTE_NONE)

答案 4 :(得分:-7)

与写'foo.txt'相反,写'foo.csv'。这解决了这个问题。在Excel中读取CSV文件时,不存在额外的引号。