#python #pandas
#python #панды
Вопрос:
Я пытаюсь экспортировать объект серии в текстовый файл, в котором текстовому файлу нужен очень специфический формат. Содержимое серии — это строки, в которых объединены все столбцы фрейма данных, каждая с очень определенной длиной (дополняется пробелами или 0). Из-за этого каждая строка является строкой.
Правила форматирования:
- Все строки должны быть одинаковой длины. Это означает, что более короткие значения должны быть дополнены либо пробелами (буквенно-цифровыми), либо 0 (числовыми)
- Вывод должен быть плоским файлом (.txt)
- Содержимое ввода не может быть скорректировано
Используемый код:
IPGJ_flat = IPGJ['period']
IPGJ_flat.to_csv('20201119_DAF IPGJ Test.txt', index = False)
Пример вывода (поддельный)
ABCDEFGHIJK
"LMNOPQRST123456789 abcdf,gh,i abcd"
"UVWXYZABC123456789 abc,def,gh abcd"
UVWXYZABC123456789 abcdefghij abcd
Необходимый вывод:
ABCDEFGHIJK
LMNOPQRST123456789 abcdf,gh,i abcd
UVWXYZABC123456789 abc,def,gh abcd
UVWXYZABC123456789 abcdefghij abcd
Кавычки применяются только в том случае, если есть строки, в которых присутствует ‘,’.
Я уже пробовал следующее:
IPGJ_flat = IPGJ['period'].to_frame()
IPGJ_flat.to_csv('20201119_DAF IPGJ Test.txt', index = False, sep = '|', quoting=csv.QUOTE_NONE, escapechar = ' ')
С вариантами seperator и escapechar, но это, похоже, портит форматирование (новые строки идентифицируются неправильно).
Есть идеи о том, как это решить?
Комментарии:
1. Каков тип вашего столбца периода?
2. Столбец периода — это тип объекта
Ответ №1:
Вы пытаетесь использовать функцию CSV ( .to_csv()
) для чего-то, что явно не является CSV. Так почему бы просто не записать его в файл, не обрабатывая его как CSV?
import pandas
# Recreating your test data
s = pandas.Series([
"LMNOPQRST123456789 abcdf,gh,i abcd",
"UVWXYZABC123456789 abc,def,gh abcd",
"UVWXYZABC123456789 abcdefghij abcd",
], name="ABCDEFGHIJK")
# Open a file to write to
with open("test.txt", "w") as f:
# Write the header to file
f.write(s.name)
f.write("n")
# Construct the content and write it to file
content = "n".join(s)
f.write(content)
# For demo purposes, show the content of the file
with open("test.txt", "r") as f:
print(f.read())
Комментарии:
1. Это решило проблему, спасибо! Внес небольшую корректировку, чтобы также не печатать имя серии в файле.
Ответ №2:
попробуйте ‘to_string’ вместо ‘to_csv’:
IPGJ_flat.to_string('20201119_DAF IPGJ Test.txt', index = False)
(прочитайте DataFrame.to_string()) для получения дополнительных опций.
Комментарии:
1. К сожалению, это не работает. Кажется, что строки обрезаются, когда они слишком длинные, с ‘…’ в конце.
Ответ №3:
В дополнение к ответу Гийса Воббена я решил его следующим образом:
for item in IPGJ_flat:
with open('Test.txt','a') as f:
f.write(item)
f.write("n")