Pandas 导出 to_csv() 并在列名两边加上引号
Pandas exporting to_csv() with quotation marks around column names
出于某种原因,我需要以这种格式输出到 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
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_prefix
和add_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
选项:
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"
'correct' 方法是使用 quoting=csv.QUOTE_ALL
(和可选的 escapechar='\'
),但请注意 QUOTE_ALL
将强制 all 列被引用,即使是像索引这样明显的数字列;如果我们没有指定 index=None
,我们会得到:
"" "date" "ret"
"0" "2018-09-24" "0.00013123989025119056"
csv.QUOTE_MINIMAL
拒绝引用这些字段,因为它们并不严格需要引号(它们既不是多行的,也不包含内部引号或分隔符)
出于某种原因,我需要以这种格式输出到 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
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_prefix
和add_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
选项:
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"
'correct' 方法是使用 quoting=csv.QUOTE_ALL
(和可选的 escapechar='\'
),但请注意 QUOTE_ALL
将强制 all 列被引用,即使是像索引这样明显的数字列;如果我们没有指定 index=None
,我们会得到:
"" "date" "ret"
"0" "2018-09-24" "0.00013123989025119056"
csv.QUOTE_MINIMAL
拒绝引用这些字段,因为它们并不严格需要引号(它们既不是多行的,也不包含内部引号或分隔符)