【问题标题】:PyCharm: How to display all columns of dataframe in 'run' window without wrapping or truncation?PyCharm:如何在“运行”窗口中显示所有数据框列而不进行换行或截断?
【发布时间】:2019-08-27 22:05:20
【问题描述】:

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

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

背景: 我已经处理了一些数据,在这些数据中我会自动选择数据的不同部分并将其以表格格式存储在特定的“.h5”文件中。这是使用 pandas 数据帧和“to_hdf”函数完成的。然后我读了它并得到以下信息:

数据集由 35 列(不包括时间列)组成,每列中有 x 个条目。对于这篇文章,他们被任意命名,以说明问题。

注意:

  • File -> Settings -> Editor -> General 的“软包装”下禁用软包装
  • 我刚刚执行了 Python 3.7 和 PyCharm Community Edition 2018.3.5 的全新安装(最初在 2019.1 版本中存在一些问题),并从我的计算机中的 PyCharm 导出文件中导入了一些 PyCharm 设置
  • 水平滚动条似乎已禁用。在任何时候都不会出现。这很奇怪,看到我回家的电脑给了我水平滚动条
  • 由于“运行”窗口中的输出在运行脚本之前会根据窗口的大小进行换行和截断(即较小的窗口与全屏窗口),因此水平滚动条很可能会在其他效果出现后重新激活被移除

我要完成三件事:

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

这是我尝试过的

我使用以下两行来稍微改进打印输出:

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

这给出了一个简洁的输出,见下文:

但是,并非所有 35 列都显示出来,请参阅标记 (1)/“...”分数。当我将允许的列数从 20 增加到 40 时,pd.set_option('display.max_columns', 40),会发生这种情况:

看来我们又回到了原点。幸运的是,其中一个负面影响消失了,即截断效应,即。我认为删除显示的列。

尽管如此,列的换行仍然会发生,因此现在行数增加了一倍,而应该可以在各自的行上显示所有内容,同时自动显示一个水平条以让用户遍历这些数据。

我还查看了link 以了解更多关于 pandas 的 set_option 方法的选项。除了我使用过的其他行之外,我还找到并尝试了这一行 pd.set_option('expand_frame_repr', True)。但就我而言,它并没有改变任何东西。

有什么想法吗?

【问题讨论】:

  • 对于我们所有没有 PyCharm 的人来说,这主要是一个 PyCharm 问题,还是更通用? (我正在寻找通用答案,而不是 PyCharm 答案)。另外,如果它充分回答了您,您能否接受一个答案,或者发布您自己的答案?
  • 据我所知,这主要是 PyCharm 问题。我不确定这是否适用于使用数据帧的其他软件。当时我只是通过专注于选定数量的列而不是尝试同时查看所有列来避免这个问题。因此,我看不到合适的解决方案。

标签: dataframe pycharm word-wrap truncation


【解决方案1】:

因此,经过大量研究后,我找到了 2 种方法来在我的数据库中获取我的列标题,该数据库到目前为止用于这项工作(2152 行,119 列)。

第一种方式,嗯,将它们称为一个列表,该列表一直水平排列。 我的数据框 = df

print(df.columns.tolist())

第二种方法是不仅在 pycharms 或任何地方显示整个数据库。它将完全删除截断,但我不得不使用两种类型的最大行列方面,这很奇怪。没有其他办法,它自己为我工作。

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 不能自己工作。

任何喜欢编码的人。

【讨论】:

  • 我不确定这是否是一种pythonic方式,但它在这里对我来说正常工作。
  • 绝对不是哈哈。大多数时候 pd.set_option 有效,但我时不时地得到一个顽固的数据框,我必须使用所有这些。
【解决方案2】:

假设您要打印有 15 行的 X。

一个对我有用的简单命令是:

print(X.to_string())

【讨论】:

    【解决方案3】:

    我在程序结束时创建了一个 final 变量,比如 .... end = 'end'

    然后我在那里放置一个调试断点,并在调试模式下运行程序。它将在最后停止,您可以在调试模式下打开数据框,瞧……您可以在整个数据框中移动,颜色编码不少于调试模式下可用的其他选项。

    【讨论】:

    • 谢谢,我试试看!这不是最方便的,但感谢您的努力。
    猜你喜欢
    • 2017-12-16
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    相关资源
    最近更新 更多