停止 jupyter notebook 在 pandas html table 输出中包装单元格内容

Stop jupyter notebook wrapping cell contents in pandas html table output

pandas 选项 max_colwidth 控制数据帧的 repr 中将包含多少个字符:

import string, random
import pandas as pd
df = pd.DataFrame([''.join(random.choice(string.ascii_lowercase + ' ') for j in range(1000)) for i in range(4)])

pd.options.display.max_colwidth = 10
print(df)

产量

           0
0  lmftge...
1  pqttqb...
2  wi wgy...
3  ow dip...

pd.options.display.max_colwidth = 30
print(df)

产量

                               0
0  lmftgenioerszvgzfaxorzciow...
1  pqttqbqqe pykgguxnjsspbcti...
2  wi wgybtgcbxkobrwnaxpxwsjc...
3  ow dippaiamvvcofvousieckko...

并且您可以设置 pd.options.display.max_colwidth = 0 以完全取消限制。目前还不错!

但是如果数据帧在笔记本中 HTML 呈现,笔记本会将列的 table 换行到显示宽度,无论此设置如何:

有什么方法可以避免这种情况,即让 HTML table 列呈现得尽可能宽以使每一行都在一行上?

更一般地说,是否可以独立于 pandas 输出中的字符数来控制笔记本输出中 HTML table 列的宽度?

如果你创建一个文件:~/.jupyter/custom$ atom custom.css 然后把它放进去:

.dataframe td {
    white-space: nowrap;
}

然后它会强制单元格显示为一行,但随后会出现滚动 table。

如果你想让它不滚动,那么设置:

div.output_subarea {
    overflow-x: inherit;
}

然后它将尽可能宽:

它不是很漂亮,但我相信如果需要你可以整理它。

我发现 很有帮助。您还需要在首次创建 css 文件后重新启动笔记本以进行注册,但从那时起您只需刷新页面即可看到对 css 的更改生效。

This was the notebook that I was testing on.

以 Ben 的回答为基础,但无需进入自定义 css 文件,这些文件对于 juptyter lab 的工作方式不同。

只需将其放入一个单元格中,然后 运行 它:

%%html
<style>
.dataframe td {
    white-space: nowrap;
}
</style>

如果您更喜欢用一行代码来完成,或者如果您需要在笔记本的不同部分使用不同的格式,另一种选择是使用 Pandas Styler:

dfs = df.style.set_table_styles([dict(selector="td", props=[('white-space', 'nowrap')])])
display(dfs)

它是基于CSS所以如果在笔记本中间你想回到以前的格式,你可以写:

dfs = df.style.set_table_styles([dict(selector="td", props=[('overflow', 'hidden'),  
                      ('text-overflow', 'ellipsis'), ('max-width', '120px')])])