python - Python制表格式只有一个浮点列
问题描述
我正在使用该tabulate
模块打印一个固定宽度的文件,并且我有一列需要格式化,即小数点左侧有 19 位,小数点右侧有 2 位。
import pandas as pd
from tabulate import tabulate
df = pd.DataFrame.from_dict({'A':['x','y','z'],
'B':[1,1.1,11.21],'C':[34.2334,81.1,11]})
df
Out[4]:
A B C
0 x 1.00 34.2334
1 y 1.10 81.1000
2 z 11.21 11.0000
df['C'] = df['C'].apply(lambda x: format(x,'0>22.2f'))
df
Out[6]:
A B C
0 x 1.00 0000000000000000034.23
1 y 1.10 0000000000000000081.10
2 z 11.21 0000000000000000011.00
print(tabulate(df))
- - ----- -----
0 x 1 34.23
1 y 1.1 81.1
2 z 11.21 11
- - ----- -----
有什么方法可以保留 C 列中的格式而不影响 B 列中的格式?我知道我可以使用 floatfmt = '0>22.2f' 但我不需要 B 列看起来只是 C 列。
根据表格文档,看起来像小数的字符串将自动转换为数字。如果我可以抑制这一点,那么在打印之前格式化我的表格(如上面的示例所示),这也会为我解决这个问题。
解决方案
GitHub 上的文档是最新的,它指出floatfmt
“每一列可能有不同的数字格式”。这是使用您的数据的示例:
import pandas as pd
from tabulate import tabulate
df = pd.DataFrame.from_dict({'A':['x','yy','zzz'],
'B':[1,1.1,11.21],'C':[34.2334,81.1,11]})
print(tabulate(df, floatfmt=(None, None, '.2f', '0>22.2f',)))
结果是:
- --- ----- ----------------------
0 x 1.00 0000000000000000034.23
1 yy 1.10 0000000000000000081.10
2 zzz 11.21 0000000000000000011.00
- --- ----- ----------------------
此外,正如您所建议的,您还可以选择disable_numparse
禁用从字符串自动转换为数字的选项。然后,您可以手动格式化每个字段,但这需要更多编码。在这种情况下,该选项colalign
可能会派上用场,因此您可以为字符串和数字指定不同的列对齐方式(您也可以将其转换为格式化字符串)。
推荐阅读
- windows - wuauclt.exe /updatenow 不通过命令行安装重要更新
- sql - 如何显示哪一列的日期最新?
- vba - 加快根据另一个工作表中的单元格删除日期之间的行
- scripting - 在 tcl 中重定向 exec 命令输出
- html - 如何使用文件夹中的本地视频而不是 Youtube URL?
- python - Django ORM 最快查询连接两个模型并获取配对元组列表
- r - 无法替换R中的空格
- javascript - d3.js 根据 id 选择
- regex - 使用 VBA RegEx 查找格式范围并保持速度
- python - ModuleNotFoundError:没有名为“tensorflow.contrib”的模块;'tensorflow' 不是一个包