В общем, все может быть оправданным, если оно соответствует требованиям вашего проекта. Это не означает, что люди согласятся или хотят защитить ваше решение ...
В общем, хранение данных таким образом является субоптимальным (например, сложнее выполнять эффективные запросы) и может вызвать проблемы с обслуживанием, если вы изменяете элементы в своей форме. Возможно, вы могли бы найти среднюю землю и вместо нее использовать целое число, представляющее набор битовых флагов?
Для настраиваемого формата для каждого столбца вы можете установить формат для всей строки. fmt param обеспечивает форматирование для каждой строки
with open('output.dat') as ofile:
fmt = '%.0f %02.0f %4.1f %3.0f %4.0f %4.1f %4.0f %4.1f %4.0f'
np.savetxt(ofile, df.values, fmt=fmt)
Python, Pandas: записать содержимое DataFrame в текст. Файл
Ответ на вопрос помог мне. Это не самое лучшее, но до тех пор, пока to_fwf
не существует, это поможет мне ...
np.savetxt(r'c:\data\np.txt', df.values, fmt='%d')
или
np.savetxt(r'c:\data\np.txt', df.values, fmt='%10.5f')
tabulate
, поскольку numpy включен в pandas, поэтому не требуется дополнительная библиотека
– maxymoo
9 March 2017 в 04:55
Я уверен, что вы нашли обходной путь для этой проблемы, но для всех, кому это интересно ... Если вы напишете DF в список, вы можете записать его в файл, указав «формат как строку», .format (индексы списка), например:
df=df.fillna('')
outF = 'output.txt'
dbOut = open(temp, 'w')
v = df.values.T.tolist()
for i in range(0,dfRows):
dbOut.write(( \
'{:7.2f}{:>6.2f}{:>2.0f}{:>4.0f}{:>5.0f}{:6.2f}{:6.2f}{:6.2f}{:6.1f {:>15}{:>60}'\
.format(v[0][i],v[1][i],v[2][i],v[3][i],v[4][i],v[5][i],v[6][i],v[7][i],v[8][i],\
v[9][i],v[10][i]) ))
dbOut.write("\n")
dbOut.close
Просто убедитесь, что каждый индекс соответствует правильному формату:)
Надеюсь, что это поможет!
Пока кто-то не выполнит это в пандах, вы можете использовать пакет tabulate :
import pandas as pd
from tabulate import tabulate
def to_fwf(df, fname):
content = tabulate(df.values.tolist(), list(df.columns), tablefmt="plain")
open(fname, "w").write(content)
pd.DataFrame.to_fwf = to_fwf