Pandas到csv输出报价问题

2024-04-26 13:33:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我在获取熊猫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,"this is ""out text"""

但我想:

123,this is "out text"

有人知道怎么做吗


Tags: csvto字符串textimportfalsedataframepandas
3条回答

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

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

注意:Pandasto_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_非数值变量的方式相反

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="\\")

相关问题 更多 >