Панды, экспортирующие to_csv () с кавычками вокруг имен столбцов - PullRequest
0 голосов
/ 20 ноября 2018

По какой-то причине мне нужно вывести в 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

Я не могу найти способ использовать цитату для переноса в столбцы.Кто-нибудь знает как?Спасибо.

Мое решение: с использованием цитирования = 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

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Это называется указанный вывод .Вместо того, чтобы вручную взламывать кавычки в именах столбцов (что будет мешать другим функциям фрейма данных), используйте параметр 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 отказывается заключать в кавычки эти поля, потому что они строго не нуждаются в кавычках (они не являются ни многострочными, ни делаютони содержат внутреннюю кавычку или символы-разделители)
0 голосов
/ 20 ноября 2018

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)
...