【问题标题】:Pandas exporting to_csv() with quotation marks around column namesPandas 导出 to_csv() 并在列名周围加上引号
【发布时间】:2019-04-22 08:55:13
【问题描述】:

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

"date" "ret"
2018-09-24 0.00013123989025119056

我正在尝试

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=' ')   

并得到如下输出:

"""date""" 'ret'
2018-09-24 0.00013123989025119056

我似乎找不到使用引号来换行的方法。有谁知道怎么做?谢谢。

我的解决方案: 使用 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)   

然后我得到

"date" "ret"
2018-09-24 0.00013123989025119056

【问题讨论】:

标签: pandas csv escaping export-to-csv quoting


【解决方案1】:

这称为引用输出。 不要手动在列名中加入引号(这会与其他数据框功能混淆),而是使用 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"

“正确”的方法是使用quoting=csv.QUOTE_ALL(以及可选的escapechar='\\'),但请注意QUOTE_ALL 将强制引用所有列,即使是明显的数字列,例如指数;如果我们没有指定index=None,我们会得到:

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

【讨论】:

    【解决方案2】:

    IIUC,您可以将quoting 参数与csv.QUOTE_NONE 一起使用

    import csv
    df.to_csv('test.csv',sep=' ',quoting=csv.QUOTE_NONE)
    

    您生成的 csv 将如下所示:

     "date" "ret"
    0 2018-09-24 0.00013123989025119056
    

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

    >>> df
             date       ret
    0  2018-09-24  0.000131
    

    然后做:

    df = df.add_suffix('"').add_prefix('"')
    df.to_csv('test.csv',sep=' ',quoting=csv.QUOTE_NONE)
    

    【讨论】:

    • 这个版本依赖吗? quoting=csv.QUOTE_NONE 时我没有得到想要的输出
    • 我不这么认为,但仅供参考,我使用的是 '0.21.1'
    猜你喜欢
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 2016-02-21
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多