Jupyter笔记本并排显示两只熊猫桌

Jupyter notebook display two pandas tables side by side

我有两个pandas数据帧,我想在Jupyter笔记本中显示它们。

做类似的事情:

1
2
display(df1)
display(df2)

将它们显示在另一个之下:

enter image description here

我想在第一个数据框右侧有第二个数据帧。 有一个类似的问题,但看起来有人对在显示它们之间的差异的一个数据框中合并它们感到满意。

这对我不起作用。 在我的例子中,数据帧可以表示完全不同的(不可比较的元素),并且它们的大小可以不同。 因此,我的主要目标是节省空间。


我最终编写了一个可以执行此操作的函数:

1
2
3
4
5
6
from IPython.display import display_html
def display_side_by_side(*args):
    html_str=''
    for df in args:
        html_str+=df.to_html()
    display_html(html_str.replace('table','table style="display:inline"'),raw=True)

用法示例:

1
2
3
df1 = pd.DataFrame(np.arange(12).reshape((3,4)),columns=['A','B','C','D',])
df2 = pd.DataFrame(np.arange(16).reshape((4,4)),columns=['A','B','C','D',])
display_side_by_side(df1,df2,df1)

enter image description here


您可以覆盖输出代码的CSS。它默认使用flex-direction: column。请尝试将其更改为row。这是一个例子:

1
2
3
4
5
6
7
8
9
10
11
import pandas as pd
import numpy as np
from IPython.display import display, HTML

CSS ="""
.output {
    flex-direction: row;
}
"""

HTML('<style>{}</style>'.format(CSS))

Jupyter image

当然,您可以根据需要进一步自定义CSS。

如果您希望仅定位一个单元格的输出,请尝试使用:nth-child()选择器。例如,此代码将修改笔记本中仅第5个单元格的输出的CSS:

1
2
3
4
5
CSS ="""
div.cell:nth-child(5) .output {
    flex-direction: row;
}
"""