68

私はPandasパッケージを使用しており、基本的にラベル付きマトリックスであるDataFrameオブジェクトを作成します。多くの場合、長い文字列フィールドを持つ列、または多くの列を持つデータフレームがあるため、単純な印刷コマンドはうまく機能しません。私はいくつかのテキスト出力関数を書きましたが、それらは素晴らしいものではありません。

私が本当に気に入っているのは、データフレーム/マトリックス/テーブルを操作できるシンプルなGUIです。SQLツールにあるのと同じように。基本的に、データの表示のような読み取り専用のスプレッドシートを持つウィンドウ。列を展開したり、長いテーブルを上下にページアップしたりできます。

このようなものが存在するのではないかと思いますが、間違った用語でグーグルしているに違いありません。パンダ固有のものであれば素晴らしいのですが、マトリックスを受け入れる任意のツールを使用できると思います。(ところで-私はWindowsを使用しています。)

ポインタはありますか?

または、逆に、誰かがこのスペースをよく知っていて、おそらくこれが存在しないことを知っている場合、自分でロールするために使用できる単純なGUIフレームワーク/ウィジェットがあるかどうかについての提案はありますか?(しかし、私のニーズは限られているので、大きなGUIフレームワークを学び、この1つのピースのためにたくさんのコーディングを行う必要はありません。)

4

20 に答える 20

55

2019年の更新:私は現在、後継のタブルーに取り組んでいます。


他のいくつかのGUIに完全に満足していなかったので、自分で作成しました。これは現在Githubで管理しています。例:

ここに画像の説明を入力してください

基本的なテーブル+プロット機能とは別に、データをフィルタリングする特定の方法が必要でした。

  • コンボボックスからフィルタリングする列を選択します
  • 任意のPythonコードを使用して、その列でフィルタリングする「アンダースコア式」を記述します。例:正の値のみをフィルタリングする場合や、日時列_ > 0などのより複雑な式をフィルタリングする場合。(_ >= date(2016, 1, 1)) & (_ <= date(2016, 1, 31))
于 2016-05-25T21:01:08.440 に答える
23

QTableWidgetPyQtからを使用してを表示しDataFrameます。を作成してQTableWidgetObjectから、createdwithvaluesを入力しQTableWidgetItemsますDataFrame。以下は、CSVファイルを読み取り、作成してDataFrame、GUIに表示するコードスニペットです。

df  = read_csv(filename, index_col = 0,header = 0)
self.datatable = QtGui.QTableWidget(parent=self)
self.datatable.setColumnCount(len(df.columns))
self.datatable.setRowCount(len(df.index))
for i in range(len(df.index)):
    for j in range(len(df.columns)):
        self.datatable.setItem(i,j,QtGui.QTableWidgetItem(str(df.iget_value(i, j))))

アップデート:

この答えはかなり古いので、更新する価値があります。GUIでデータフレームを表示するために現在利用可能な多くのオプションがあります。

  1. 他の人が指摘しているように、SpyderなどのPythonIDEにはデータフレームビューアが付属しています。
  2. qgridは、ノートブック内のデータフレームをレンダリングするjupyterノートブックウィジェットのもう1つのオプションです。

それでも誰かがJupyter内のデータフレームを表示するための単純なGUIをコーディングしたい場合は、Pyqt5を使用した完全で最小限の例を次に示します。

%gui qt5 
from PyQt5.QtWidgets import QWidget,QScrollArea, QTableWidget, QVBoxLayout,QTableWidgetItem
import pandas as pd

win = QWidget()
scroll = QScrollArea()
layout = QVBoxLayout()
table = QTableWidget()
scroll.setWidget(table)
layout.addWidget(table)
win.setLayout(layout)    


df = pd.DataFrame({"a" : [4 ,5, 6],"b" : [7, 8, 9],"c" : [10, 11, 12]},index = [1, 2, 3])
table.setColumnCount(len(df.columns))
table.setRowCount(len(df.index))
for i in range(len(df.index)):
    for j in range(len(df.columns)):
        table.setItem(i,j,QTableWidgetItem(str(df.iloc[i, j])))

win.show()

ここに画像の説明を入力してください

于 2012-08-20T11:30:18.340 に答える
18

質問は2012年に投稿されたものであり、他の回答は古すぎて適用できない可能性があります。

2016年の答えは、Pycharmを使用する必要があり、DataFrameビューアに同梱されているということです。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

于 2016-11-04T02:10:50.380 に答える
11

Pandas 0.13は、実験的な機能として次の機能を提供します。

qtpandasDataFrameModelとのPySideサポートDataFrameWidget

https://github.com/pydata/pandas/blob/master/doc/source/faq.rstを参照してください

この機能は、を使用して追加できます

from pandas.sandbox.qtpandas import DataFrameModel, DataFrameWidget
于 2014-03-04T08:07:48.387 に答える
8

to_html()データフレームメソッドを使用して、データフレームをhtmlに変換し、ブラウザに表示することができます。これは、dfというデータフレームがあると仮定した例です。ドキュメントをチェックして、to_html()メソッドで使用できる他のオプションを確認する必要があります。

# Format floating point numbers with 2 decimal places.
data_table = df.to_html(float_format=lambda x: '%6.2f' % x,
    classes="table display")
# The to_html() method forces a html table border of 1 pixel.
# I use 0  in my table so I  change the html, since there is no 
# border argument in the to_html() method.
data_table = data_table.replace('border="1"','border="0"')
# I alson like to display blanks instead on nan.
data_table = data_table.replace('nan', '')

テーブルを適切にフォーマットしてスクロール可能にしたい場合は、 jQuerywww.datatables.net用のdatatablesプラグインを使用できます。これは、x方向とy方向の両方でスクロールするテーブルを表示するために使用するJavaScriptです。

$('.table').dataTable({
    "bPaginate": true,
    "bLengthChange": true,
    "bSort": false,
    "bStateSave": true,
    "sScrollY": 900,
    "sScrollX": 1000,
    "aLengthMenu": [[50, 100, 250, 500, 1000, -1], [50, 100, 250, 500, 1000, "All"]],
    "iDisplayLength": 100,
});
于 2013-06-02T16:27:16.000 に答える
8

すべての貴重な回答に加えて、Spyder IDE(https://github.com/spyder-ide)には、以下の私の印刷画面に表示されているように、この機能があることをお伝えしたいと思います。

ここに画像の説明を入力してください

これは単なる客観的な事実であり、IDEの宣伝ではありません:)この質問についての議論を引き起こしたくありません。

于 2016-08-14T02:02:14.650 に答える
8

データフレームのto_clipboard()メソッドを使用すると、データフレームをすばやくコピーしてスプレッドシートに貼り付けることができます。

df.to_clipboard()
于 2018-04-04T19:11:11.880 に答える
6

python2.7にはtkintertable 、 python3にはpandastableがあります。

于 2014-11-06T21:49:29.473 に答える
6

私が見つけた最も優れた解決策は、を使用することです(ここqgridを参照し、パンダのドキュメントにも記載されています)。あなたはによってインストールすることができます

pip install qgrid

IPython次に、ノートブックにさらに(1回だけ)インストールする必要があります

qgrid.nbinstall()

pandas dfその後、それはあなたを連れて走るのと同じくらい簡単です

qgrid.show_grid(df)

もう1つの良い点は、それもレンダリングされることnbviewerです。ここで実際の動作を確認してください

于 2015-07-06T01:16:37.087 に答える
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
于 2012-05-24T22:29:32.383 に答える
3

ここで多くの提案をテストしましたが、特にPython 3の場合、どれも簡単に実行またはインストールできないようですが、基本的に目的を達成する関数を作成しました。これらのデータフレームを全画面表示にし、場合によってはスクロール可能にする必要があります。

したがって、UnixとLinux StackExchangeからのこの回答に触発された、Libreoffice Calcを使用するLinux環境では、Python3でできることは次のとおりです。

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です。与えたデータフレームごとにLibreofficeCalcの複数のインスタンスが生成され、別々の画面で全画面表示できます。次にCalcを閉じると、自動的にクリーンアップされます。

于 2017-10-14T17:12:24.840 に答える
2

私はあなたが役に立つかもしれないパンダDataFrameのためのPyQtGUIに取り組んできました。これには、コピー、フィルタリング、および並べ替えが含まれます。

https://gist.github.com/jsexauer/f2bb0cc876828b54f2ed

于 2015-01-11T14:41:28.637 に答える
2

QTableWidgetではなくQTableViewを使用することを強くお勧めします。QTableViewは、モデルビュープログラミングに基づいています。

これらのウィジェットがデータにアクセスする方法は2つあります。従来の方法では、データを格納するための内部コンテナを含むウィジェットが使用されます。このアプローチは非常に直感的ですが、多くの重要なアプリケーションでは、データ同期の問題が発生します。2番目のアプローチは、ウィジェットが内部データコンテナを維持しないモデル/ビュープログラミングです。

パンダデータフレームのモデルを作成しました。

# -*- coding: utf-8 -*-
from PyQt5 import QtCore
from PyQt5 import QtWidgets
from PyQt5 import QtGui
import matplotlib.pyplot as plt

class PandasModel(QtCore.QAbstractTableModel):
    """
    Class to populate a table view with a pandas dataframe
    """

    def __init__(self, data, parent=None):
        QtCore.QAbstractTableModel.__init__(self, parent)
        self._data = data

    def rowCount(self, parent=None):
        return len(self._data.values)

    def columnCount(self, parent=None):
        return self._data.columns.size

    def data(self, index, role=QtCore.Qt.DisplayRole):
        if index.isValid():
            if role == QtCore.Qt.DisplayRole:
                if(index.column() != 0):
                    return str('%.2f'%self._data.values[index.row()][index.column()])
                else:
                    return str(self._data.values[index.row()][index.column()])
        return None

    def headerData(self, section, orientation, role):
        if orientation == QtCore.Qt.Horizontal and role == QtCore.Qt.DisplayRole:
            return self._data.columns[section]
        elif orientation == QtCore.Qt.Vertical and role == QtCore.Qt.DisplayRole:
            return str(self._data.index[section])
        return None

    def flags(self, index):
        flags = super(self.__class__,self).flags(index)
        flags |= QtCore.Qt.ItemIsSelectable
        flags |= QtCore.Qt.ItemIsEnabled
        return flags


if __name__=='__main__':
    import pandas as pd
    import numpy as np
    df = pd.DataFrame()
    df['Field1']=np.arange(0,10,.5)
    df['Field2']=np.arange(0,10,.5)
    app = QtWidgets.QApplication([])
    table = QtWidgets.QTableView()
    mymodel = PandasModel(df)
    table.setModel(mymodel)
    table.show()
    app.exec_()

モデルを簡単に変更して、必要に応じて要素を適切に編集または表示できます。詳細については、 modelviewを参照してください

ここに画像の説明を入力してください

于 2017-07-23T07:49:49.370 に答える
1

私も非常に単純なGUIを検索してきました。誰も言及していないことに驚いたgtabview

インストールは簡単で(ちょうどpip3 install gtabview)、データを非常に高速にロードします。spyderまたはPycharmを使用していない場合は、gtabviewを使用することをお勧めします。

于 2019-02-13T00:57:35.607 に答える
1

非常に簡単な方法の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()、Excelから新しいブックを作成したりできます。シートを作成/切り替えるには、通常、小さなカスタム関数を使用します

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
于 2019-11-29T16:16:20.547 に答える
0

私自身はPandasユーザーではありませんが、「pandas gui」をすばやく検索すると、PandasプロジェクトのGSOC2012提案が見つかります。

現在、これらのオブジェクトを操作する唯一の方法はAPIを使用することです。このプロジェクトでは、これらのオブジェクトを表示および操作するための単純なQtまたはTkGUIを追加することを提案しています。

したがって、GUIはありませんが、QtまたはTkを使用してGUIを作成する場合、プロジェクトはコードに関心がある可能性があります。

于 2012-05-17T12:55:30.223 に答える
0

GitHubAtomをHydrogenプラグインで使用できます。Macでは、Cmd+Shiftキーを使用して行ごとに実行できます。変数だけを選択して中を見ることができます。DataFrameは見事に表示され、コピーすることもできます。これらを設定する方法を示すブログを書きました。 http://ojitha.blogspot.com.au/2016/08/atom-as-spark-editor.html

于 2017-02-23T10:14:42.783 に答える
0

提案できますpivotablejsか?

Jupyterノートブックのわずか数行で、水平および垂直のピボット、フィルタリング、グラフ化、並べ替え、およびさまざまな集計をすべて提供します(ヒント:[ポップアウト]リンクを右クリックして新しいタブで開くと、柔軟性が向上します)

!pip install pivottablejs
from pivottablejs import pivot_ui

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

グラフィックピボットの例

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

于 2019-11-26T09:03:12.433 に答える
0

パンダスタブルライブラリも使用できます

https://github.com/dmnfarrell/pandastable

私のアプリケーションには非常に便利だと思いました

'pipinstallpandastable'を使用して簡単にpandastableをインストールできます

私のアプリケーションはpandas==0.23.4で動作し、このバージョンのpandasはpandastableでうまく動作します

于 2020-01-01T19:00:19.197 に答える