以科学计数法保存并以不同的Sep进行保存

时间:2019-06-18 12:48:35

标签: python python-3.x pandas

如何以科学格式保存python数据框。第二个问题是关于如何以适当的方式保存数据帧。这是我的示例:

        koefi       300Grad       500Grad        620Grad
0         nu  3.300000e-01  3.300000e-01       0.330000
1         bk  1.021627e+02  7.491372e+02     200.000000
2   alphaChi  1.000000e+00  1.000000e+00       1.000000
3    betaChi  2.500000e-01  2.500000e-01       0.250000
4         sn  1.535676e+00  5.246025e+00       3.500000
5         sk  2.070121e+02  1.000000e+02     116.152032

目前,我只能用sep = '\t'保存它,而不能用sep = '\s+'或其他保存方法。与到目前为止的科学格式一样,我仅发现:float_format='%.6f

我当前的输出:

    koefi   300Grad 500Grad 620Grad
0   nu  0.330000    0.330000    0.330000
1   bk  102.162699  749.137166  200.000000
2   alphaChi    1.000000    1.000000    1.000000
3   betaChi 0.250000    0.250000    0.250000
4   sn  1.535676    5.246025    3.500000
5   sk  207.012055  100.000000  116.15203

它看起来并不是特别好,这里有人想以更好的方式保存它,所以看起来更令人愉快。

list_final.to_csv(path_or_buf='Z:/simul/results/result.dat', index=True, sep='\s+', decimal='.',float_format='%.6f')
  

TypeError:“定界符”必须为1个字符的字符串

非常感谢您的帮助。

编辑:我尝试使用install -c synthicity prettytable在Anaconda Prompt中安装prettytable。

出现错误:

  

UnstatisfiableError:发现以下规格   冲突:-anaconda == 5.2.0 = py36_3-> sqlite [version   ='3.23.1,> = 3.23.1,<4.0a0',内部版本= h35aae40_0]   -prettytable

2 个答案:

答案 0 :(得分:2)

为什么不只是将文件另存为CSV?这是任何人都可以理解的标准格式,并且有大量的软件可以更漂亮地可视化CSV文件。

如果您确实需要查看原始文本文件,并且希望它很漂亮,则可以尝试使用PrettyTable库。熊猫to_csv不能立即使用,因此您需要做更多的工作。

要以科学计数形式设置数字格式,可以传递float_format='%.2E'

编辑:

这是一个如何使用PrettyTable美化输出的示例:

# in your virtual environment: pip install PTable
from prettytable import PrettyTable

my_table = PrettyTable()
my_table.field_names = ['index', *list_final.columns]

for idx, row in list_final.iterrows():
    formatted_row = [idx]
    for val in row.values:
        if isinstance(val, str):
            formatted_row.append(val)
        else:
            formatted_row.append('%.2E' % val)

    my_table.add_row(formatted_row)

with open('Z:/simul/results/result.dat', 'w') as outfile:
    outfile.write(str(my_table))

答案 1 :(得分:0)

DataFrame.to_csv(...)用于以csv / dsv格式存储数据,而不是美观。考虑使用以下方法将数据保存起来像一个不错的表:

import pandas as pd

# sample data
data = pd.DataFrame(
    {'300grad': [.33, .0162],
     '500grad': [.33, 245],
     '620grad': [.33, 395_000]},
    index=['nu', 'mumumu'])

# format templates
bones_head = '{:>8}' + '{:>10}' * data.shape[1] + '\n'
bones_line = '{:>8}' + '{:>10.2e}' * data.shape[1] + '\n'

# save data to file according to format templates
with open('2.csv', 'w') as fout:
    fout.write(bones_head.format('', *data.columns))
    for dummy, row in data.iterrows():
        fout.write(bones_line.format(row.name, *row))

结果:

           300grad   500grad   620grad
      nu  3.30e-01  3.30e-01  3.30e-01
  mumumu  1.62e-02  2.45e+02  3.95e+05

另一种方法-修改索引和列:

import pandas as pd

# sample data
data = pd.DataFrame(
    {'300grad': [.33, .0162],
     '500grad': [.33, 245],
     '620grad': [.33, 395_000]},
    index=['nu', 'mumumu'])

# modify index values to have the same width
index_width = max(len(val) for val in data.index)
data.index = [' ' * (index_width - len(val)) + val for val in data.index]
data.index.name = ' ' * index_width

# modify column names to have the same width
col_width = max(10, *(len(val) for val in data.columns))
data.columns = [' ' * (col_width - len(val)) + val for val in data.columns]

# save data to file
data.to_csv('1.csv', float_format=f'%{col_width}.2e')

结果:

      ,   300grad,   500grad,   620grad
    nu,  3.30e-01,  3.30e-01,  3.30e-01
mumumu,  1.62e-02,  2.45e+02,  3.95e+05