#python #python-3.x #pandas #numpy #dataframe
#python #python-3.x #pandas #numpy #фрейм данных
Вопрос:
Иметь огромный фрейм данных pandas (df), подобный этому:
id date a b c
0 0023 201110132120 -30 -45 7
1 0023 201110132130 -30 11 9111
2 0023 201110132140 -24 44 345
3 0023 201110132150 -19 223 11
4 0023 201110132200 -23 -3456 -1250
Мне нужно записать этот фрейм данных в файл со специальной фиксированной шириной для каждого поля.
Для этого я использовал numpy, например.:
np.savetxt('out.txt', df.values, fmt='% 4s % 12s % 5s % 5s % 6s')
Это работает нормально. В этом случае потерян только заголовок. Есть ли обходной путь?
Я также тестировал его с помощью функции pandas to_string:
df.to_string()
Но это так медленно. Почему? Есть ли другие варианты?
Ответ №1:
Одним из вариантов является злоупотребление header
option в savetxt
:
formats = '% 4s % 12s % 5s % 5s % 6s'
headers = [format(str(x),y.replace('% ','>'))
for x, y in zip(df.columns,formats.split())]
np.savetxt('out.txt', df.values, fmt=formats,
header=' '.join(headers), comments='')
Ответ №2:
header='{:>4s} {:>12s} {:>5s} {:>5s} {:>6s}'.format('id','date','a','b','d')
np.savetxt('out.txt', df.values, fmt='% 4s % 12s % 5s % 5s % 6s', header=header)