Python / Pandas - 用于查看DataFrame或矩阵的GUI

73
我正在使用Pandas包,它创建了一个DataFrame对象,基本上是一个带标签的矩阵。通常我的列具有长字符串字段,或者数据框有许多列,所以简单的print命令不起作用。我已经编写了一些文本输出函数,但它们并不好用。
我真正想要的是一个简单的GUI,可以让我与数据框/矩阵/表进行交互。就像在SQL工具中一样。基本上是一个窗口,其中包含对数据的只读电子表格视图。我可以展开列,在长表格中上下翻页等等。
我会怀疑这样的东西存在,但我肯定是使用错误的术语进行谷歌搜索。如果它是pandas特定的那就太好了,但我猜我可以使用任何矩阵接受工具。(顺便说一句-我正在使用Windows系统)
有任何建议吗?
或者,相反地,如果有人对这个领域很了解,知道这个东西可能不存在,是否有任何建议,如果有一个简单的GUI框架/部件,我可以使用它来自己制作?(但由于我的需求有限,我不愿意为这一个部分学习大型GUI框架并进行大量编码)

2
Pyspread 会有任何帮助吗? - Maria Zverina
看起来对我的需求有些过度,但如果没有更简单的方法,我会研究一下它。谢谢。 - Ross R
2
这个能在Spyder(http://code.google.com/p/spyderlib/)中完成吗?我一直在使用Rstudio和R,我喜欢能够通过单击查看数据。我完全同意Python / Pandas的可比工具缺失,iPython很棒,但在这个领域不是最好的选择。 - zach
(2020年)。有[D-tale](http://alphatechadmin.pythonanywhere.com/dtale/main/1)。对于Jupyter,[这篇文章](https://towardsdatascience.com/two-essential-pandas-add-ons-499c1c9b65de)介绍了两个强大的插件:[qgrid](https://github.com/quantopian/qgrid)和[pivottablejs](https://github.com/nicolaskruchten/jupyter_pivottablejs)。 - mins
你可以使用Pandas GUI。我的回答可能会有所帮助:https://stackoverflow.com/a/65283412/5114585 - Dr Nisha Arora
显示剩余3条评论
20个回答

3

看起来没有简单的解决方案。因此,下面是一个小函数,用于在Excel中打开数据框。它可能不是生产质量的代码,但对我而言有效!

def open_in_excel(df, index=True, excel_path="excel.exe", tmp_path='.'):
    """Open dataframe df in excel.

    excel_path - path to your copy of excel
    index=True - export the index of the dataframe as the first columns
    tmp_path    - directory to save the file in


    This creates a temporary file name, exports the dataframe to a csv of that file name,
    and then tells excel to open the file (in read only mode). (It uses df.to_csv instead
    of to_excel because if you don't have excel, you still get the csv.)

    Note - this does NOT delete the file when you exit. 
    """

    f=tempfile.NamedTemporaryFile(delete=False, dir=tmp_path, suffix='.csv', prefix='tmp_')
    tmp_name=f.name
    f.close()

    df.to_csv(tmp_name, index=index)
    cmd=[excel_path, '/r', '/e', tmp_name]
    try:
        ret_val=subprocess.Popen(cmd).pid
    except:
        print "open_in_excel(): failed to open excel"
        print "filename = ", tmp_name
        print "command line = ", cmd
        print "Unexpected error:", sys.exc_info()[0]

    return

太棒了,运行得很好!要在Python 3中使其工作:import tempfileimport subprocessimport sys,将excel.exe的路径更新为类似于C:\Program Files\Microsoft Office\Office16\Excel.exe(取决于系统)。print语句需要在周围加上括号,以使它们与Python 3兼容。还可以在pip install xlwt之后使用.to_excel,它会将数据写入.xls而不是.csv临时文件。 - Contango

3

2

我使用ipython笔记本驱动pandas -- 笔记本提供了一种很好的干净方式来逐步构建和交互pandas数据结构,包括对数据帧进行HTML格式化的显示:http://ipython.org/notebook.html


该链接并没有指向任何解决方案,只是指向了iPython(现在是Jupyter)的主页。那么“数据框的HTML显示”在哪里呢?它是在这个答案中描述的吗?还是它们只是some_df.head(n)的单元格输出? - mins
任何遇到这个问题的人可能需要:漂亮地打印整个 Pandas Series / DataFrame - user26742873

2
我也一直在寻找简单的图形用户界面。令我惊讶的是,没有人提到 gtabview
它很容易安装(只需使用 pip3 install gtabview 命令),并且加载数据非常快速。 如果您没有使用 Spyder 或 Pycharm,我建议您使用 gtabview。

2

我尝试了这里的许多建议,但是它们似乎都不容易运行或安装,特别是对于Python 3,但现在我编写了一个函数,基本上实现了我想要的功能。有时需要将这些数据框全屏显示并滚动。

因此,在使用Libreoffice Calc的Linux环境中,受Unix和Linux StackExchange中这个答案的启发,以下是您可以在Python 3中执行的操作:

import pandas as pd
import os

def viewDF(*dfs):
    filelist = ""
    for c, df in enumerate(dfs):    
        filename = 'tmp_df' + str(c) + '.csv'
        odsfile = 'tmp_df' + str(c) + '.ods'
        df.to_csv(filename)
        os.system("soffice --headless --convert-to ods  {}".format(filename))     
        filelist += odsfile + " "
    os.system("soffice --view {}".format(filelist)) 
    os.system("rm {}".format('tmp_df*'))

这样使用:

viewDF(df1, df2, df3)

我在那里学到了一些东西,即Python 3替换语法 "{}.format"。这些打开的文件是只读的,在任何情况下它们都是稍后删除的文件,因此它实际上是数据框的GUI。它将为您提供的每个数据框生成多个Libreoffice Calc实例,您可以在单独的屏幕上全屏查看它们,然后一旦关闭Calc,它就会自动清理。


经过测试许多答案后,我惊讶地发现这是最好的解决方案。我稍微修改了一下: ending = time.strftime('%Y%m%d%H%M%S') filename = f'tmp_df_{ending}%s' df.to_csv(filename%'csv') os.system(f"soffice --headless --convert-to ods {filename%'csv'}") os.system(f"soffice --view {filename%'ods'}") - Hunaphu

1

我自己不是Pandas的用户,但是快速搜索“pandas gui”会出现Pandas项目的GSOC 2012 proposal

目前与这些对象交互的唯一方式是通过API。该项目建议添加一个简单的Qt或Tk GUI,以查看和操作这些对象。

因此,没有GUI,但如果您使用Qt或Tk编写一个GUI,该项目可能会对您的代码感兴趣。


谢谢,但我认为建立一个通用的工具超出了我的技能水平! - Ross R

1

一种非常简单的方法是使用xlwings在Excel中查看数据框。它对Pandas数据帧有很好的处理能力。按照通常的方式安装即可。

pip install xlwings

然后在你工作时保持Excel打开即可

import xlwings as xw
xw.sheets.active.range("A1").value = df         # put df in currently active sheet

更加复杂的操作可以使用 app = xw.App() 打开 Excel,或者使用 xw.Book() 创建一个新的工作簿。我通常使用一个小型自定义函数来创建/切换工作表。
def addActivate(wb, sheet, after=None, before=None):
    try:
        wb.sheets.add(sheet, after=after, before=before)
    except ValueError:
        wb.sheets(sheet).activate()

addActivate(xw.books.active, "newSheet")
xw.sheets.active.range("A1").value = df

0

你也可以使用pandastable库

https://github.com/dmnfarrell/pandastable

我发现它对我的应用程序非常有用

您可以使用“pip install pandastable”轻松安装pandastable

我的应用程序在pandas==0.23.4上运行,这个版本的pandas与pandastable很好地配合使用


0

您可以使用带有Hydrogen插件的GitHub Atom。在Mac上,您可以使用Cmd + Shift键逐行执行。甚至您还可以仅选择变量并查看内部。DataFrames显示得很好,您甚至可以复制。我写了一篇博客来展示配置的方法。 http://ojitha.blogspot.com.au/2016/08/atom-as-spark-editor.html


0
我可以推荐使用 pivotablejs 吗?
它提供了水平和垂直的透视、过滤、绘图、排序以及许多不同的聚合功能,只需在 Jupyter 笔记本中编写几行代码即可实现(提示:右键单击 [pop out] 链接并在新标签页中打开以增加灵活性)。
!pip install pivottablejs
from pivottablejs import pivot_ui

pivot_ui(df, outfile_path='pivottablejs.html')

Graphic pivoting example

https://towardsdatascience.com/two-essential-pandas-add-ons-499c1c9b65de


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