我如何打印一个熊猫数据框架作为一个漂亮的基于文本的表,就像下面?
+------------+---------+-------------+
| column_one | col_two | column_3 |
+------------+---------+-------------+
| 0 | 0.0001 | ABCD |
| 1 | 1e-005 | ABCD |
| 2 | 1e-006 | long string |
| 3 | 1e-007 | ABCD |
+------------+---------+-------------+
熊猫>= 1.0
如果你想要一个内置的函数来转储你的数据到一些github markdown,你现在有一个。看看to_markdown:
df = pd.DataFrame({"A": [1, 2, 3], "B": [1, 2, 3]}, index=['a', 'a', 'b'])
print(df.to_markdown())
| | A | B |
|:---|----:|----:|
| a | 1 | 1 |
| a | 2 | 2 |
| b | 3 | 3 |
这是它在github上的样子:
请注意,您仍然需要安装表格包。
我使用丰富的库,它有更好看的表比基于.to_markdown()。
import pandas as pd
from rich.console import Console
from rich.table import Table
df = pd.DataFrame({'col_two' : [0.0001, 1e-005 , 1e-006, 1e-007],
'column_3' : ['ABCD', 'ABCD', 'long string', 'ABCD']})
console = Console()
table = Table('Title')
table.add_row(df.to_string(float_format=lambda _: '{:.4f}'.format(_)))
console.print(table)
给你这个表格:
更多定制选项请参阅文档:
https://rich.readthedocs.io/en/stable/tables.html
我用了奥弗的答案一段时间,发现它在大多数情况下都很棒。不幸的是,由于pandas的to_csv和prettytable的from_csv之间的不一致,我不得不以不同的方式使用prettytable。
一个失败的例子是包含逗号的数据帧:
pd.DataFrame({'A': [1, 2], 'B': ['a,', 'b']})
Prettytable引发了一个形式错误:
Error: Could not determine delimiter
下面的函数处理这种情况:
def format_for_print(df):
table = PrettyTable([''] + list(df.columns))
for row in df.itertuples():
table.add_row(row)
return str(table)
如果你不关心索引,使用:
def format_for_print2(df):
table = PrettyTable(list(df.columns))
for row in df.itertuples():
table.add_row(row[1:])
return str(table)