use*_*761 40 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)
Run Code Online (Sandbox Code Playgroud)
输出是:
123,"这是""外出文字"""
但我想:
123,这是"出文字"
有谁知道如何做到这一点?
DSM*_*DSM 59
你可以通过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"
Run Code Online (Sandbox Code Playgroud)
但根据我的经验,最好引用更多,而不是更少.
Owe*_*wen 19
注意:Pandas to_string文档中目前存在一个小错误.它说:
- 引用:int,控制是否应该识别引号.值取自csv.QUOTE_*值.对于QUOTE_MINIMAL,QUOTE_ALL,QUOTE_NONE和QUOTE_NONNUMERIC,可接受的值分别为0,1,2和3
.
但这反转了csv如何定义QUOTE_NONE和QUOTE_NONNUMERIC变量.
In [13]: import csv
In [14]: csv.QUOTE_NONE
Out[14]: 3
Run Code Online (Sandbox Code Playgroud)
要使用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="\\")
Run Code Online (Sandbox Code Playgroud)
不使用转义字符时使用:
\n\n将df 中的逗号字符(Unicode:U+002C) 替换为 单个低 9 引号字符(Unicode: U+201A),\xe2\x80\x9a
之后,您可以简单地使用:
\n\nimport csv\ndf.to_csv('foo.txt', index=False, header=False, quoting=csv.QUOTE_NONE)