如何以科学格式保存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
答案 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