PyCharm:如何在“运行”窗口中显示数据框的所有列而不换行或截断?

13

我面临的问题与如何强制“运行”窗口显示给定pandas数据框的所有列有关,而不将其适应窗口大小(这对我来说要么通过截断列名,要么通过未显示所有列来实现)。

换句话说,我需要将数据显示在它们预期的行上,并且如果窗口视图太小以无法显示所有列,则应出现水平滚动条(像通常一样),以便我可以轻松遍历数据。

背景: 我处理了一些数据,其中我自动选择并以表格格式存储不同部分的数据在特定的".h5"文件中。这是使用pandas数据帧和“to_hdf”函数完成的。然后我读取它并获得以下结果:view in the 'Run' output window

数据集包含35列(不包括时间列),每个列中都有x个条目。为了说明问题,它们已被随意命名。

请注意:

  • 在“文件 -> 设置 -> 编辑器 -> 一般”下禁用软换行
  • 我刚刚安装了Python 3.7和PyCharm Community Edition 2018.3.5(最初使用2019.1版本时出现了一些问题),并导入了来自我电脑回家的PyCharm设置的一些导出文件
  • 水平滚动条似乎已禁用。在任何时候都不会出现。这很奇怪,因为我的电脑回家给了我水平滚动条
  • 由于“运行”窗口中的输出根据脚本运行之前的窗口大小包装和截断(即小屏幕窗口与全屏窗口),因此当删除其他效果后,水平滚动条很可能会重新激活

我想实现三件事:

  1. 展示数据框的所有列,同时允许我通过水平滚动条滚动(目前似乎已禁用),这意味着:
  2. 不换行列名,参见上图中的标记(1)和(2)。也不要因为“运行”窗口的大小限制而截断/删除列,参见同一图像中的标记(3)。
  3. 次要任务:当前,“时间”列(设置为行索引)仅以日期形式打印在此打印输出中,同时存储了小时、分钟和秒。希望一旦完成1和2,这将自动修复(我的其他表格显示完整的日期+小时等而没有问题)。

我尝试过的方法:

我使用了以下两行来改善输出:

pd.set_option('display.max_columns', 20)
pd.set_option('display.width', 2000)

这会产生一个漂亮的输出,如下所示:this

然而,并非所有的35列都显示出来,见标记(1) / ". . ." 标记。当我将允许的列数从20增加到40, pd.set_option('display.max_columns', 40), 发生了这种情况:happens

看起来我们回到了原点。幸运的是,负面影响之一消失了,即截断效应,即所展示的列的移除。

然而,仍然存在列换行的问题,导致现在有两倍数量的行,而它应该可以在自己的行上展示所有内容,同时自动展示一个水平条以让用户遍历这些数据。

我还查看了这个链接,以了解更多Pandas set_option方法的选项。我发现并尝试了这行代码,pd.set_option('expand_frame_repr', True),除了我已经使用的其他行外,但在我的情况下它没有改变任何东西。

有什么想法吗?


对于我们所有没有PyCharm的人来说,这主要是一个PyCharm问题还是更通用的问题?(我正在寻找通用答案,而不是PyCharm的答案)。此外,如果有人已经充分回答了你的问题,请接受他们的答案,或者自己发布答案。 - smci
据我所知,这主要是PyCharm的问题。我不确定是否适用于其他使用数据框架的软件。当时,我只是避免了这个问题,而是专注于选择一些列,而不是尝试同时查看所有列。因此,我没有看到任何正确的解决方案。 - Fhyarnir
5个回答

13

假设你想打印有15行的X。

我用过的一个简单命令是:

print(X.to_string())


3

经过大量研究,我发现有两种方法可以在我的数据库中获取列标题,目前该数据库包含2152行,119列。

第一种方法是将它们称为一个列表,水平排列如下:

My DataFrame = df

这种方法并不是很好。

print(df.columns.tolist())

第二种方法是在pycharm或其他地方不仅显示整个数据库,它将完全消除截断,但我必须使用两种类型的最大行列方面,这很奇怪。没有其他方法适用于我。
pd.options.display.width= None
pd.options.display.max_columns= None
pd.set_option('display.max_rows', 3000)
pd.set_option('display.max_columns', 3000)

Then just print your dataframe 
print(df)

使用这4行代码,我可以打开任何小于3000列/行的数据库并查看所有内容。对此感到非常高兴,但有点困惑为什么没有人或pd.options或pd.set_option本身就能够实现这一点。

无论如何,愉快的编码。


1
我不确定这是否是一种 Pythonic 的做法,但是在这里它对我来说运行良好。 - Bitart
绝对不是哈哈。大多数情况下,pd.set_option 可以解决问题,但偶尔会遇到一些棘手的数据框,必须使用全部选项。 - JQTs
这个问题困扰我很久了,我向Pycharm寻求帮助,但没有得到解决方案。不过现在问题已经解决了!顺便说一下,我还遇到了其他相关问题,需要尝试各种设置的组合来解决。 - Simon

2
Pandas(≥ Pandas 0.23.4)会自动检测您的终端窗口大小,如果您设置了以下内容:
pd.options.display.width = 0

对于旧版本(< Pandas 0.23.4),您需要设置以下内容:

import pandas as pd
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)

1
我在程序的结尾创建了一个最终变量,比如说... end = 'end'。然后我在那里设置了一个调试断点,并以调试模式运行程序。它会在结尾处停止,您可以在调试模式下打开数据框,并且您可以使用颜色编码和其他调试模式中可用的选项来移动整个数据框。

谢谢,我会尝试一下!虽然不是最方便的方法,但还是感谢你的努力。 - Fhyarnir

0

一个更新的2023年答案。

  • PyCharm在输出中使用其本地元素进行一些魔法,而不是使用默认的Jupyter / Pandas HTML输出。我没有找到这个魔法的文档或者它应该如何工作。
  • 我找不到一种方法来强制PyCharm默认显示笔记本输出中的所有行。PyCharm不会遵循Pandas的display.max_rows选项。
  • 然而,在魔法输出上有一个按钮,允许你在右上角展开表格以显示完整的行。

display.max_rows


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接