Pandasパッケージを使用しています。これは基本的にラベル付きマトリックスであるDataFrameオブジェクトを作成します。多くの場合、長い文字列フィールドを持つ列、または多くの列を持つデータフレームがあるため、私はいくつかのテキスト出力関数を書きましたが、それらは素晴らしいものではありません。
私が本当に気に入っているのは、データフレーム/マトリックス/テーブルとやり取りできるシンプルなGUIです。 SQLツールで見られるように。基本的に、データの表示のような読み取り専用のスプレッドシートを持つウィンドウ。列を拡大したり、長いテーブルなどでページを上下に移動したりできます。
私はこのようなものが存在するのではないかと疑っていますが、間違った用語でグーグルにならなければなりません。 pandas特定の場合、それは素晴らしいことですが、私は、任意のマトリックス受け入れツールを使用できると思います。(ところで-私はWindows上にいます。)
ポインタはありますか?
または、逆に、誰かがこのスペースをよく知っていて、おそらくこれが存在しないことを知っている場合、私が自分自身をロールするために使用できるシンプルなGUIフレームワーク/ウィジェットがあるかどうかについての提案はありますか? (しかし、私のニーズは限られているため、大きなGUIフレームワークを学び、この1つのピースのために大量のコーディングを行う必要がありません。)
PyQtのQTableWidget
を使用してDataFrame
を表示します。 QTableWidgetObject
を作成し、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でデータフレームを表示するための多くのオプションが利用可能になりました。
誰かがまだ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()
私は他のいくつかのGUIに完全に満足していなかったので、自分で作成しました。Githubで を維持しています 。例:
基本的なテーブル+プロット機能とは別に、データをフィルタリングする特定の方法が必要でした。
_ > 0
、または(_ >= date(2016, 1, 1)) & (_ <= date(2016, 1, 31))
などのより複雑な式を使用して、その列をフィルタリングする「アンダースコア式」を記述します。日時列用。Pandas 0.13は実験的な機能として提供します:
Qtpandas DataFrameModel
およびDataFrameWidget
のPySideサポート
https://github.com/pydata/pandas/blob/master/doc/source/faq.rst を参照してください
を使用してこの機能を追加できます
from pandas.sandbox.qtpandas import DataFrameModel, DataFrameWidget
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', '')
テーブルを適切にフォーマットしてスクロール可能にする場合は、jQueryのdatatablesプラグイン www.datatables.net を使用できます。以下は、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,
});
すべての貴重な答えに加えて、Spyder IDE( https://github.com/spyder-ide )にはこの機能があります。以下の私のプリントスクリーンで見ることができます:
これは単なる客観的な事実であり、IDE :)の宣伝ではありません。
私が見つけた最も良い解決策は、qgrid
を使用することです( here を参照し、 pandas docs で言及されています)。でインストールできます
pip install qgrid
IPython
ノートブックでさらに(1回だけ)インストールする必要があります
qgrid.nbinstall()
その後、pandas
df
を取得して実行するのと同じくらい簡単です。
qgrid.show_grid(df)
もう1つの良い点は、nbviewer
でもレンダリングすることです。実際にご覧ください こちら
Python2.7には tkintertable があり、python3には pandastable があります。
データフレームのto_clipboard()メソッドを使用すると、データフレームをスプレッドシートにすばやくコピーして貼り付けることができます。
df.to_clipboard()
簡単な解決策はないようです。そのため、以下は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の場合、簡単に実行したりインストールしたりすることはできませんでした。これらのデータフレームを全画面表示にし、スクロール可能にすることもあります。
したがって、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を閉じると、Libreoffice Calcは自動的にクリーンアップされます。
私はpandas DataFrameが役に立つと思うかもしれません。コピー、フィルタリング、ソートを含むPyQt GUIに取り組んでいます。
QTableViewではなくQTableWidgetを使用することを強くお勧めします。 QTableViewは、モデルビュープログラミングに基づいています。
これらのウィジェットがデータにアクセスする方法は2つあります。従来の方法には、データを保存するための内部コンテナを含むウィジェットが含まれます。このアプローチは非常に直感的ですが、多くの重要なアプリケーションでは、データ同期の問題につながります。 2番目のアプローチは、モデル/ビュープログラミングです。このプログラミングでは、ウィジェットは内部データコンテナーを保持しません。
pandas dataframeのモデルを作成しました。
# -*- 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 を参照してください
Ipythonノートブックを使用してpandas-ノートブックは、HTMLフレーム化されたデータフレームの表示を含む、pandas : http://ipython.org/notebook.html
また、非常にシンプルなguiも検索しています。誰もgtabview
に言及していないことに驚いた。インストールは簡単で(pip3 install gtabview)、データを非常に高速にロードします。 spyderまたはPycharmを使用していない場合は、gtabviewを使用することをお勧めします。
私はPandasユーザーではありませんが、「pandas gui」をすばやく検索すると、Pandasプロジェクトの GSOC 2012提案 =:
現在、これらのオブジェクトと対話する唯一の方法はAPIを使用することです。このプロジェクトでは、これらのオブジェクトを表示および操作するためのシンプルなQtまたはTk GUIを追加することを提案しています。
したがって、GUIはありませんが、QtまたはTkを使用してGUIを作成する場合、プロジェクトはコードに関心があるかもしれません。
GitHub Atom Hydrogenプラグインを使用できます。Macでは、Cmd + Shiftキーを使用して行ごとに実行できます。変数のみを選択して内部を確認することもできます。これらを設定する方法を示すブログを書きました http://ojitha.blogspot.com.au/2016/08/atom-as-spark-editor.html