Pandas 导出 to_csv() 在列名周围加上引号

use*_*780 3 csv escaping quoting export-to-csv pandas

出于某种原因,我需要以这种格式输出到 csv 并在每列名称周围加上引号,我想要的输出如下所示:

"date" "ret"
2018-09-24 0.00013123989025119056
Run Code Online (Sandbox Code Playgroud)

我正在尝试

import csv
import pandas as pd

Y_pred.index.name = "\"date\""
Y_pred.name = "\'ret\'"
Y_pred = Y_pred.to_frame()
path = "prediction/Q1/"
try:
    os.makedirs(path)
except:
    pass

Y_pred.to_csv(path+instrument_tmp+"_ret.txt",sep=' ')   
Run Code Online (Sandbox Code Playgroud)

并得到如下输出:

"""date""" 'ret'
2018-09-24 0.00013123989025119056
Run Code Online (Sandbox Code Playgroud)

我似乎无法找到一种使用引号将列换行的方法。有谁知道怎么做?谢谢。

我的解决方案: 使用 quoting=csv.QUOTE_NONE 和 Y_pred.index.name = "\"date\"", Y_pred.name = "\"ret\""

Y_pred.index.name = "\"date\""
Y_pred.name = "\"ret\""
Y_pred = Y_pred.to_frame()
path = "prediction/Q1/"
try:
    os.makedirs(path)
except:
    pass

Y_pred.to_csv(path+instrument_tmp+"_ret.txt",sep=' ',quoting=csv.QUOTE_NONE)   
Run Code Online (Sandbox Code Playgroud)

然后我得到

"date" "ret"
2018-09-24 0.00013123989025119056
Run Code Online (Sandbox Code Playgroud)

smc*_*mci 6

这称为引用输出。不要手动在列名中加上引号(这会干扰其他数据框功能),而是使用以下quoting选项:

df = pd.DataFrame({"date": ["2018-09-24"], "ret": [0.00013123989025119056]})

df.to_csv("out_q_esc.txt", sep=' ', escapechar='\\', quoting=csv.QUOTE_ALL, index=None)
"date" "ret"
"2018-09-24" "0.00013123989025119056"
Run Code Online (Sandbox Code Playgroud)

“正确”的方法是使用quoting=csv.QUOTE_ALL(和可选escapechar='\\'),但请注意,这QUOTE_ALL将强制引用所有列,甚至是像索引这样的数字列;如果我们没有指定index=None,我们会得到:

"" "date" "ret"
"0" "2018-09-24" "0.00013123989025119056"
Run Code Online (Sandbox Code Playgroud)
  • csv.QUOTE_MINIMAL 拒绝引用这些字段,因为它们并不严格需要引号(它们既不是多行也不是包含内部引号或分隔符)


sac*_*cuL 5

IIUC,您可以使用该quoting参数csv.QUOTE_NONE

import csv
df.to_csv('test.csv',sep=' ',quoting=csv.QUOTE_NONE)
Run Code Online (Sandbox Code Playgroud)

您生成的 csv 将如下所示:

 "date" "ret"
0 2018-09-24 0.00013123989025119056
Run Code Online (Sandbox Code Playgroud)

旁注:为了方便向您的列添加引文,您可以使用add_prefixadd_suffix。如果您的起始数据框如下所示:

>>> df
         date       ret
0  2018-09-24  0.000131
Run Code Online (Sandbox Code Playgroud)

然后做:

df = df.add_suffix('"').add_prefix('"')
df.to_csv('test.csv',sep=' ',quoting=csv.QUOTE_NONE)
Run Code Online (Sandbox Code Playgroud)