首页 > 解决方案 > 以科学计数法保存并以不同的 sep 保存

问题描述

如何以科学格式保存 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: "delimiter" 必须是 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', build= h35aae40_0] - prettytable

标签: pythonpython-3.xpandas

解决方案


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

如果您确实需要查看原始文本文件并且希望它漂亮,那么您可以尝试PrettyTable库。它不适用于开箱即用的 pandas 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))


推荐阅读