Необходимо создать файл с фиксированной шириной Python / Pandas [duplicate]

В общем, все может быть оправданным, если оно соответствует требованиям вашего проекта. Это не означает, что люди согласятся или хотят защитить ваше решение ...

В общем, хранение данных таким образом является субоптимальным (например, сложнее выполнять эффективные запросы) и может вызвать проблемы с обслуживанием, если вы изменяете элементы в своей форме. Возможно, вы могли бы найти среднюю землю и вместо нее использовать целое число, представляющее набор битовых флагов?

9
задан jkmacc 10 May 2013 в 21:23
поделиться

4 ответа

Для настраиваемого формата для каждого столбца вы можете установить формат для всей строки. 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)
3
ответ дан Brian Burns 21 August 2018 в 08:02
поделиться

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')
5
ответ дан Community 21 August 2018 в 08:02
поделиться
  • 1
    IMO это лучше, чем 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

Просто убедитесь, что каждый индекс соответствует правильному формату:)

Надеюсь, что это поможет!

2
ответ дан leon yin 21 August 2018 в 08:02
поделиться

Пока кто-то не выполнит это в пандах, вы можете использовать пакет 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
5
ответ дан Matt Kramer 21 August 2018 в 08:02
поделиться
  • 1
    Это работало элегантно для меня. Так много здравого смысла, что возиться с форматированием в стиле строки вручную. – DeusXMachina 3 February 2017 в 16:28
Другие вопросы по тегам:

Похожие вопросы: