我如何打印一个熊猫数据框架作为一个漂亮的基于文本的表,就像下面?
+------------+---------+-------------+
| column_one | col_two | column_3 |
+------------+---------+-------------+
| 0 | 0.0001 | ABCD |
| 1 | 1e-005 | ABCD |
| 2 | 1e-006 | long string |
| 3 | 1e-007 | ABCD |
+------------+---------+-------------+
根据Mark的回答,如果你因为某些原因不使用Jupyter,例如你想在控制台上做一些快速测试,你可以使用DataFrame。to_string方法,它至少从Pandas 0.12(2014)开始工作。
import pandas as pd
matrix = [(1, 23, 45), (789, 1, 23), (45, 678, 90)]
df = pd.DataFrame(matrix, columns=list('abc'))
print(df.to_string())
# outputs:
# a b c
# 0 1 23 45
# 1 789 1 23
# 2 45 678 90
我使用丰富的库,它有更好看的表比基于.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)
熊猫>= 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上的样子:
请注意,您仍然需要安装表格包。