Python 熊猫到csv输出报价问题
我无法将pandasPython 熊猫到csv输出报价问题,python,file-io,pandas,Python,File Io,Pandas,我无法将pandasdataframe.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,“这是“输出文本” 但我想: 1
dataframe.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,这是“外文本”
有人知道怎么做吗 您可以传递
quoting=csv.QUOTE\u 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"
但根据我的经验,最好是多引用,而不是少引用。注意:目前熊猫中有一个小错误。它说:
- quoting:int,控制是否应识别引号。值取自csv.QUOTE_*值。可接受的值为0、1、2和3
3对于最小报价、全部报价、无报价和非数字报价,
分别
In [13]: import csv
In [14]: csv.QUOTE_NONE
Out[14]: 3
要使用
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="\\")
不带escapechar使用: 将df中的逗号字符
,
(Unicode:U+002C)替换为单个低9引号字符,
(Unicode:U+201A)
在此之后,您可以简单地使用:
导入csv
df.to_csv('foo.txt',index=False,header=False,quoting=csv.QUOTE_NONE)
我尝试了这个方法,但得到了“错误:需要转义,但没有转义设置”。我还试图添加escapechar='\\'或escapechar=None,但似乎不起作用…@user3199761:这是因为与粘贴的示例不同,您的真实数据中有一些需要转义的内容,例如带有逗号的字符串。如果您输出a,“b,c”,d
,您可以解析结果,但是如果您写出a,b,c,d
,则列是什么?你说不出来。我确实用上面相同的例子尝试了你的代码,但是得到了错误。我正在使用pandas 0.11.0和python 2.7.6,不确定这是否有帮助。这是否意味着为了禁用引用,您需要加载另一个库,并在pandas的函数中从中调用一个函数?@user5359531:不,这意味着您导入内置的csv
库只是为了获得csv.QUOTE\NONE
常量(这恰好是数字3,但你不能保证它总是正确的)。