熊猫to_csv输出引用问题



我在正确引用字符串的熊猫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_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"

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

注意:Pandas to_string文档中目前有一个小错误。 它说:

  • 引用 : 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

要使用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='')
>>> 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="\")

在没有转义字符的情况下使用:

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

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

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

如果您不想为导入 csv 而烦恼,您只需使用以下行

即可

df.to_csv('foo.txt', index=False, header=False, quoting=3,sep=",",escapechar=",")

最新更新