An interactive grid for sorting, filtering, and editing DataFrames in Jupyter notebooks

Related tags

Data Analysis qgrid
Overview
qgrid

qgrid

Qgrid is a Jupyter notebook widget which uses SlickGrid to render pandas DataFrames within a Jupyter notebook. This allows you to explore your DataFrames with intuitive scrolling, sorting, and filtering controls, as well as edit your DataFrames by double clicking cells.

Qgrid was developed for use in Quantopian's hosted research environment and is available for use in that environment as of June 2018. Quantopian also offers a fully managed service for professionals that includes Qgrid, Zipline, Alphalens, Pyfolio, FactSet data, and more.

Announcements: Qgrid Webinar

Qgrid author Tim Shawver recently did a live webinar about Qgrid, and the recording of the webinar is now available on YouTube.

This talk will be interesting both for people that are new to Qgrid, as well as longtime fans that are interested in learning more about the project.

Demo

Click the badge below to try out the latest beta of qgrid in Quantopian's hosted research environment. If you're already signed into Quantopian you'll be brought directly to the demo notebook. Otherwise you'll be prompted to register (it's free):

https://img.shields.io/badge/launch-quantopian-red.svg?colorB=d33015

Click the badge below to try out qgrid using binder:


Click the following badge to try out qgrid in Jupyterlab, also using binder:


For both binder links, you'll see a brief loading screen while a server is being created for you in the cloud. This shouldn't take more than a minute, and usually completes in under 10 seconds.

The binder demos generally will be using the most recent stable release of qgrid, so features that were added in a recent beta version may not be available in those demos.

For people who would rather not go to another page to try out qgrid for real, here's the tldr; version:

docs/images/filtering_demo.gif

API Documentation

API documentation is hosted on readthedocs.

Installation

Installing with pip:

pip install qgrid
jupyter nbextension enable --py --sys-prefix qgrid

# only required if you have not enabled the ipywidgets nbextension yet
jupyter nbextension enable --py --sys-prefix widgetsnbextension

Installing with conda:

# only required if you have not added conda-forge to your channels yet
conda config --add channels conda-forge

conda install qgrid

Jupyterlab Installation

First, go through the normal installation steps above as you normally would when using qgrid in the notebook. If you haven't already install jupyterlab and enabled ipywidgets, do that first with the following lines:

pip install jupyterlab
jupyter labextension install @jupyter-widgets/jupyterlab-manager

Install the qgrid-jupyterlab extension and enable:

jupyter labextension install qgrid2

At this point if you run jupyter lab normally with the 'jupyter lab' command, you should be able to use qgrid in notebooks as you normally would.

Please Note: Jupyterlab support has been tested with jupyterlab 0.30.5 and jupyterlab-manager 0.31.3, so if you're having trouble, try installing those versions. Feel free to file an issue if you find that qgrid isn't working with a newer version of either dependency.

What's New

Column-specific options (as of 1.1.0): Thanks to a significant PR from the community, Qgrid users now have the ability to set a number of options on a per column basis. This allows you to do things like explicitly specify which column should be sortable, editable, etc. For example, if you wanted to prevent editing on all columns except for a column named 'A', you could do the following:

col_opts = { 'editable': False }
col_defs = { 'A': { 'editable': True } }
qgrid.show_grid(df, column_options=col_opts, column_definitions=col_defs)

See the updated show_grid documentation for more information.

Disable editing on a per-row basis (as of 1.1.0): This feature can be thought of as the first row-specific option that qgrid supports. In particular it allows a user to specify, using python code, whether or not a particular row should be editable. For example, to make it so only rows in the grid where the 'status' column is set to 'active' are editable, you might use the following code:

def can_edit_row(row):
    return row['status'] == 'active'

qgrid.show_grid(df, row_edit_callback=can_edit_row)

New API methods for dynamically updating an existing qgrid widget (as of 1.1.0): Adds the following new methods, which can be used to update the state of an existing Qgrid widget without having to call show_grid to completely rebuild the widget:

Improved MultiIndex Support (as of 1.0.6-beta.6): Qgrid now displays multi-indexed DataFrames with some of the index cells merged for readability, as is normally done when viewing DataFrames as a static html table. The following image shows qgrid displaying a multi-indexed DataFrame that was returned from Quantopian's Pipeline API:

https://s3.amazonaws.com/quantopian-forums/pipeline_with_qgrid.png

Dependencies

Qgrid runs on Python 2 or 3. You'll also need pip for the installation steps below.

Qgrid depends on the following three Python packages:

Jupyter notebook
This is the interactive Python environment in which qgrid runs.
ipywidgets
In order for Jupyter notebooks to be able to run widgets, you have to also install this ipywidgets package. It's maintained by the Jupyter organization, the same people who created Jupyter notebook.
Pandas
A powerful data analysis / manipulation library for Python. Qgrid requires that the data to be rendered as an interactive grid be provided in the form of a pandas DataFrame.

These are listed in requirements.txt and will be automatically installed (if necessary) when qgrid is installed via pip.

Compatibility

qgrid IPython / Jupyter notebook ipywidgets Jupyterlab
0.2.0 2.x N/A N/A
0.3.x 3.x N/A N/A
0.3.x 4.0 4.0.x N/A
0.3.x 4.1 4.1.x N/A
0.3.2 4.2 5.x N/A
0.3.3 5.x 6.x N/A
1.0.x 5.x 7.x 0.30.x

Running the demo notebooks locally

There are a couple of demo notebooks in the qgrid-notebooks repository which will help you get familiar with the functionality that qgrid provides. Here are the steps to clone the qgrid-notebooks repository and open a demo notebook:

  1. Install qgrid by following the instructions in the Installation section above, if you haven't already

  2. Clone the qgrid-notebooks repository from GitHub:

    git clone https://github.com/quantopian/qgrid-notebooks.git
    
  3. Install the dev requirements for the repository and start the notebook server:

    cd qgrid-notebooks
    pip install -r requirements_dev.txt
    jupyter notebook
    
  4. Click on one of the two notebooks (index.ipynb or experimental.ipynb) that you see listed in the notebook UI in your browser.

Running from source & testing your changes

If you'd like to contribute to qgrid, or just want to be able to modify the source code for your own purposes, you'll want to clone this repository and run qgrid from your local copy of the repository. The following steps explain how to do this.

  1. Clone the repository from GitHub and cd into the top-level directory:

    git clone https://github.com/quantopian/qgrid.git
    cd qgrid
    
  2. Install the current project in editable mode:

    pip install -e .
    
  3. Install the node packages that qgrid depends on and build qgrid's javascript using webpack:

    cd js && npm install .
    
  4. Install and enable qgrid's javascript in your local jupyter notebook environment:

    jupyter nbextension install --py --symlink --sys-prefix qgrid && jupyter nbextension enable --py --sys-prefix qgrid
    
  5. If desired, install the labextension:

    jupyter labextension link js/
    
  6. Run the notebook as you normally would with the following command:

    jupyter notebook
    

Manually testing server-side changes

If the code you need to change is in qgrid's python code, then restart the kernel of the notebook you're in and rerun any qgrid cells to see your changes take effect.

Manually testing client-side changes

If the code you need to change is in qgrid's javascript or css code, repeat step 3 to rebuild qgrid's npm package, then refresh the browser tab where you're viewing your notebook to see your changes take effect.

Running automated tests

There is a small python test suite which can be run locally by running the command pytest in the root folder of the repository.

Building docs

The read-the-docs page is generated using sphinx. If you change any doc strings or want to add something to the read-the-docs page, you can preview your changes locally before submitting a PR using the following commands:

pip install sphinx sphinx_rtd_theme
cd docs && make html

This will result in the docs/_build/html folder being populated with a new version of the read-the-docs site. If you open the index.html file in your browser, you should be able to preview your changes.

Events API

As of qgrid 1.0.3 there are new on and off methods in qgrid which can be used to attach/detach event handlers. They're available on both the qgrid module (see qgrid.on), and on individual QgridWidget instances (see qgrid.QgridWidget.on). Previously the only way to listen for events was to use undocumented parts of the API.

Having the ability to attach event handlers allows us to do some interesting things in terms of using qgrid in conjunction with other widgets/visualizations. One example is using qgrid to filter a DataFrame that's also being displayed by another visualization.

If you previously used the observe method to respond to qgrid events, lets see how your code might be updated to use the new on method:

# Before upgrading to 1.0.3
def handle_df_change(change):
    print(change['new'])

qgrid_widget.observe(handle_df_change, names=['_df'])

When you upgrade to 1.0.3, you have more granular control over which events you do an don't listen to, but you can also replicate the previous behavior of calling print every time the state of the internal DataFrame is changed. Here's what that would look like using the new on method:

# After upgrading to 1.0.3
def handle_json_updated(event, qgrid_widget):
    # exclude 'viewport_changed' events since that doesn't change the DataFrame
    if (event['triggered_by'] != 'viewport_changed'):
        print(qgrid_widget.get_changed_df())

qgrid_widget.on('json_updated', handle_json_updated)

See the events notebook for more examples of using these new API methods.

For people who would rather not go to another page to try out the events notebook, here are a couple of gifs to give you an idea of what you can do with it.

The first gif shows how you can use qgrid to filter the data that's being shown by a matplotlib scatter plot:

docs/images/linked_to_scatter.gif

The second gif shows how you can move qgrid to a separate view in JupyterLab, which makes it more convenient to use in conjunction with other visualizations (in this case, a couple of Output widgets):

docs/images/events_api.gif

Continuing to use qgrid 0.3.3

If you're looking for the installation and usage instructions for qgrid 0.3.3 and the sample notebook that goes along with it, please see the qgrid 0.3.3 tag in this repository. The installation steps will be mostly the same. The only difference is that when you run "pip install" you'll have to explicitly specify that you want to install version 0.3.3, like this:

pip install qgrid==0.3.3

If you're looking for the API docs, you can find them on the readthedocs page for qgrid 0.3.3.

If you're looking for the demo notebook for 0.3.3, it's still availabe in nbviewer.

Qgrid 0.3.3 is not compatible with ipywidgets 7, so if you need support for ipywidgets 7, you'll need to use qgrid 1.0.

Contributing

All contributions, bug reports, bug fixes, documentation improvements, enhancements, and ideas are welcome. See the Running from source & testing your changes section above for more details on local qgrid development.

If you are looking to start working with the qgrid codebase, navigate to the GitHub issues tab and start looking through interesting issues.

Feel free to ask questions by submitting an issue with your question.

Comments
  • Add an IPython widget

    Add an IPython widget

    Makes the QGrid into an IPython Widget (valid for IPython 3 and 4).

    • Adds the ability to edit contents with validation for numerical types.
    • Categorical types automatically create a dropdown list.
    • Date types create a date editor.
    • Can add/remove rows.
    • Can export the grid for a static view.

    qgrid_demo5

    Categorical data:

    screen shot 2015-08-09 at 10 58 24 am
    opened by blink1073 25
  • Qgrid install breaks bqplot in jupyterlab

    Qgrid install breaks bqplot in jupyterlab

    bootstrap 0e08c6e8d1d771f76828:103 GET http://localhost:8888/nullnbextensions/qgrid/0.bundle.js net::ERR_ABORTED requireEnsure @ bootstrap 0e08c6e8d1d771f76828:103 (anonymous) @ plugin.js:95 exports @ plugin.js:94 WidgetManager.loadClass @ manager.js:143 (anonymous) @ manager-base.js:262 step @ manager-base.js:42 (anonymous) @ manager-base.js:23 (anonymous) @ manager-base.js:17 __awaiter @ manager-base.js:13 ManagerBase._make_model @ manager-base.js:256 (anonymous) @ manager-base.js:246 step @ manager-base.js:42 (anonymous) @ manager-base.js:23 (anonymous) @ manager-base.js:17 __awaiter @ manager-base.js:13 ManagerBase.new_model @ manager-base.js:232 ManagerBase.handle_comm_open @ manager-base.js:144 (anonymous) @ manager.js:82 (anonymous) @ default.js:901 Promise resolved (async) DefaultKernel._handleCommOpen @ default.js:897 DefaultKernel._onWSMessage @ default.js:729 _ws.onmessage @ default.js:653 manager-base.js:272 Could not instantiate widget (anonymous) @ manager-base.js:272 step @ manager-base.js:42 (anonymous) @ manager-base.js:23 rejected @ manager-base.js:15 Promise rejected (async) step @ manager-base.js:16 (anonymous) @ manager-base.js:17 __awaiter @ manager-base.js:13 ManagerBase._make_model @ manager-base.js:256 (anonymous) @ manager-base.js:246 step @ manager-base.js:42 (anonymous) @ manager-base.js:23 (anonymous) @ manager-base.js:17 __awaiter @ manager-base.js:13 ManagerBase.new_model @ manager-base.js:232 ManagerBase.handle_comm_open @ manager-base.js:144 (anonymous) @ manager.js:82 (anonymous) @ default.js:901 Promise resolved (async) DefaultKernel._handleCommOpen @ default.js:897 DefaultKernel._onWSMessage @ default.js:729 _ws.onmessage @ default.js:653 renderer.js:84 Error displaying widget renderer.js:85 Error: Loading chunk 0 failed. at HTMLScriptElement.onScriptComplete (bootstrap 0e08c6e8d1d771f76828:98) utils.js:119 Error: Could not create a model. at promiseRejection (utils.js:119) at promiseRejection @ utils.js:119 Promise rejected (async) ManagerBase.handle_comm_open @ manager-base.js:149 (anonymous) @ manager.js:82 (anonymous) @ default.js:901 Promise resolved (async) DefaultKernel._handleCommOpen @ default.js:897 DefaultKernel._onWSMessage @ default.js:729 _ws.onmessage @ default.js:653 bootstrap 0e08c6e8d1d771f76828:98 Uncaught (in promise) Error: Loading chunk 0 failed. at HTMLScriptElement.onScriptComplete (bootstrap 0e08c6e8d1d771f76828:98) onScriptComplete @ bootstrap 0e08c6e8d1d771f76828:98 Promise rejected (async) ManagerBase.register_model @ manager-base.js:208 (anonymous) @ manager-base.js:247 step @ manager-base.js:42 (anonymous) @ manager-base.js:23 (anonymous) @ manager-base.js:17 __awaiter @ manager-base.js:13 ManagerBase.new_model @ manager-base.js:232 ManagerBase.handle_comm_open @ manager-base.js:144 (anonymous) @ manager.js:82 (anonymous) @ default.js:901 Promise resolved (async) DefaultKernel._handleCommOpen @ default.js:897 DefaultKernel._onWSMessage @ default.js:729 _ws.onmessage @ default.js:653 bootstrap 0e08c6e8d1d771f76828:98 Uncaught (in promise) Error: Loading chunk 0 failed. at HTMLScriptElement.onScriptComplete (bootstrap 0e08c6e8d1d771f76828:98) onScriptComplete @ bootstrap 0e08c6e8d1d771f76828:98 Promise rejected (async) ManagerBase.handle_comm_open @ manager-base.js:149 (anonymous) @ manager.js:82 (anonymous) @ default.js:901 Promise resolved (async) DefaultKernel._handleCommOpen @ default.js:897 DefaultKernel._onWSMessage @ default.js:729 _ws.onmessage @ default.js:653

    bug 
    opened by timkpaine 22
  • Pandas 1.0.0 Compatibility

    Pandas 1.0.0 Compatibility

    Issue

    Environment

    • Operating System: WIN10 1903
    • Python Version: 3.7.6
    • How did you install Qgrid: conda create -n qgrid_test python=3.7 qgrid pandas
    Python packages in conda env:
    (qgrid_test) H:\>conda list
    # Name                    Version                   Build  Channel
    attrs                     19.3.0                     py_0    conda-forge
    backcall                  0.1.0                      py_0    conda-forge
    bleach                    3.1.0                      py_0    conda-forge
    ca-certificates           2019.11.28           hecc5488_0    conda-forge
    certifi                   2019.11.28               py37_0    conda-forge
    colorama                  0.4.3                      py_0    conda-forge
    decorator                 4.4.1                      py_0    conda-forge
    defusedxml                0.6.0                      py_0    conda-forge
    entrypoints               0.3                   py37_1000    conda-forge
    importlib_metadata        1.5.0                    py37_0    conda-forge
    inflect                   4.0.0                    py37_1    conda-forge
    intel-openmp              2019.4                      245
    ipykernel                 5.1.4            py37h5ca1d4c_0    conda-forge
    ipython                   7.11.1           py37h5ca1d4c_0    conda-forge
    ipython_genutils          0.2.0                      py_1    conda-forge
    ipywidgets                7.5.1                      py_0    conda-forge
    jaraco.itertools          5.0.0                      py_0    conda-forge
    jedi                      0.16.0                   py37_0    conda-forge
    jinja2                    2.11.1                     py_0    conda-forge
    jsonschema                3.2.0                    py37_0    conda-forge
    jupyter_client            5.3.4                    py37_1    conda-forge
    jupyter_core              4.6.1                    py37_0    conda-forge
    libblas                   3.8.0                    14_mkl    conda-forge
    libcblas                  3.8.0                    14_mkl    conda-forge
    liblapack                 3.8.0                    14_mkl    conda-forge
    libsodium                 1.0.17               h2fa13f4_0    conda-forge
    m2w64-gcc-libgfortran     5.3.0                         6
    m2w64-gcc-libs            5.3.0                         7
    m2w64-gcc-libs-core       5.3.0                         7
    m2w64-gmp                 6.1.0                         2
    m2w64-libwinpthread-git   5.0.0.4634.697f757               2
    markupsafe                1.1.1            py37hfa6e2cd_0    conda-forge
    mistune                   0.8.4           py37hfa6e2cd_1000    conda-forge
    mkl                       2019.4                      245
    more-itertools            8.2.0                      py_0    conda-forge
    msys2-conda-epoch         20160418                      1
    nbconvert                 5.6.1                    py37_0    conda-forge
    nbformat                  5.0.4                      py_0    conda-forge
    notebook                  6.0.3                    py37_0    conda-forge
    numpy                     1.17.5           py37hc71023c_0    conda-forge
    openssl                   1.1.1d               hfa6e2cd_0    conda-forge
    pandas                    1.0.0            py37he350917_0    conda-forge
    pandoc                    2.9.1.1                       0    conda-forge
    pandocfilters             1.4.2                      py_1    conda-forge
    parso                     0.6.0                      py_0    conda-forge
    pickleshare               0.7.5                 py37_1000    conda-forge
    pip                       20.0.2                   py37_1    conda-forge
    prometheus_client         0.7.1                      py_0    conda-forge
    prompt_toolkit            3.0.3                      py_0    conda-forge
    pygments                  2.5.2                      py_0    conda-forge
    pyrsistent                0.14.11          py37hfa6e2cd_1    conda-forge
    python                    3.7.6                h5b45d93_2    conda-forge
    python-dateutil           2.8.1                      py_0    conda-forge
    pytz                      2019.3                     py_0    conda-forge
    pywin32                   225              py37hfa6e2cd_0    conda-forge
    pywinpty                  0.5.7                    py37_0    conda-forge
    pyzmq                     18.1.1           py37h16f9016_0    conda-forge
    qgrid                     1.1.1                 py37_1001    conda-forge
    send2trash                1.5.0                      py_0    conda-forge
    setuptools                45.1.0                   py37_0    conda-forge
    six                       1.14.0                   py37_0    conda-forge
    sqlite                    3.30.1               hfa6e2cd_0    conda-forge
    terminado                 0.8.3                    py37_0    conda-forge
    testpath                  0.4.4                      py_0    conda-forge
    tornado                   6.0.3            py37hfa6e2cd_0    conda-forge
    traitlets                 4.3.3                    py37_0    conda-forge
    vc                        14.1                 h0510ff6_4
    vs2015_runtime            14.16.27012          hf0eaf9b_1
    wcwidth                   0.1.8                      py_0    conda-forge
    webencodings              0.5.1                      py_1    conda-forge
    wheel                     0.34.2                   py37_0    conda-forge
    widgetsnbextension        3.5.1                    py37_0    conda-forge
    wincertstore              0.2                   py37_1003    conda-forge
    winpty                    0.4.3                         4    conda-forge
    zeromq                    4.3.2                h6538335_2    conda-forge
    zipp                      2.1.0                      py_0    conda-forge
    
    Jupyterlab extensions:

    Runs in baseenvironment accesses the environment kernel using nb_conda_kernels

    (base) H:\>labextension list
    
    JupyterLab v1.2.6
    Known labextensions:
       app dir: C:\ProgramData\Miniconda3\share\jupyter\lab
            @aquirdturtle/collapsible_headings v0.5.0 enabled  ok
            @bokeh/jupyter_bokeh v1.1.1 enabled  ok
            @jupyter-widgets/jupyterlab-manager v1.1.0 enabled  ok
            @jupyterlab/toc v1.0.1 enabled  ok
            @lckr/jupyterlab_variableinspector v0.3.0 enabled  ok
            @pyviz/jupyterlab_pyviz v0.8.0 enabled  ok
            jupyter-matplotlib v0.5.0 enabled  ok
            jupyterlab-jupytext v1.1.1 enabled  ok
            jupyterlab-system-monitor v0.4.1 enabled  ok
            jupyterlab-theme-toggle v0.4.2 enabled  ok
            jupyterlab-topbar-extension v0.4.0 enabled  ok
            qgrid v1.1.1 enabled  ok
    
    

    Description of Issue

    Qgrid seems to be incompatible with Pandas 1.0.0.

    Reproduction Steps

    Notebook Cell:

    import qgrid
    qwid = qgrid.show_grid(pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]}), show_toolbar=True)
    qwid
    

    Output:

    ---------------------------------------------------------------------------
    AttributeError                            Traceback (most recent call last)
    <ipython-input-26-f756e5d59b94> in <module>
          1 import qgrid
    ----> 2 qwid = qgrid.show_grid(pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]}), show_toolbar=True)
          3 qwid
    
    ~\.conda\envs\WeldCompare\lib\site-packages\qgrid\grid.py in show_grid(data_frame, show_toolbar, precision, grid_options, column_options, column_definitions, row_edit_callback)
        509                        column_definitions=column_definitions,
        510                        row_edit_callback=row_edit_callback,
    --> 511                        show_toolbar=show_toolbar)
        512 
        513 
    
    ~\.conda\envs\WeldCompare\lib\site-packages\qgrid\grid.py in __init__(self, *args, **kwargs)
        625 
        626         if self.df is not None:
    --> 627             self._update_df()
        628 
        629     def _grid_options_default(self):
    
    ~\.conda\envs\WeldCompare\lib\site-packages\qgrid\grid.py in _update_df(self)
        818         self._unfiltered_df = self._df.copy()
        819 
    --> 820         self._update_table(update_columns=True, fire_data_change_event=False)
        821         self._ignore_df_changed = False
        822 
    
    ~\.conda\envs\WeldCompare\lib\site-packages\qgrid\grid.py in _update_table(self, update_columns, triggered_by, scroll_to_row, fire_data_change_event)
        877                        isinstance(col_series, pd.PeriodIndex)
        878 
    --> 879             if type(df.index) == pd.core.index.MultiIndex:
        880                 self._multi_index = True
        881                 for idx, cur_level in enumerate(df.index.levels):
    
    AttributeError: module 'pandas.core' has no attribute 'index'
    

    Possible solution

    From Pandas Release Notes:

    pandas.core.index has been deprecated and will be removed in a future version, the public classes are available in the top-level namespace (GH19711)

    opened by joshkreud 18
  • qgrid does not appear

    qgrid does not appear

    I am trying to load a qgrid from a pandas dataframe, but when I run:

    import qgrid
    import pandas as pd
    df=pd.DataFrame([dict(idx=0,A=1),dict(idx=2,A=2)])`
    

    Nothing happens (no error or anything else). Here are errors listed in my JS console:

    Couldn't create a view for model id 'd7522ce5e25148848c5e49c7fdf8f795' -- TypeError: require is not a function(…) (anonymous function) @ utils.js:760 z @ VM218:22R @ VM218:22 (anonymous function) @ VM218:22 g @ VM218:22

    utils.js:760 Could not create view -- WrappedError {stack: "Error: Couldn't create a view for model id 'd7522c…39d168d24e1b201697c328:1:0), :22:8069)", message: "Couldn't create a view for model id 'd7522ce5e25148848c5e49c7fdf8f795'", error_stack: Array[3]}(anonymous function) @ utils.js:760 z @ VM218:22 R @ VM218:22 C @ VM218:22T @ VM218:22 g @ VM218:22

    utils.js:760 Could not display model -- WrappedError {stack: "Error: Could not create view↵ at new Error (nat…39d168d24e1b201697c328:1:0), :22:8069)", message: "Could not create view", error_stack: Array[4]}(anonymous function) @ utils.js:760 z @ VM218:22 R @ VM218:22 C @ VM218:22T @ VM218:22 g @ VM218:22

    opened by jmerkow 17
  • Add logic for automatic display in ipython

    Add logic for automatic display in ipython

    Using the IPython display architecture you can register functions that are automatically called when a DataFrame is displayed. This will enable users to optionally enable qgrid to display DataFrame by default, without an extra call. Running on a plane now, but please ping the ipython devs (or me later) on how this can be done. Awesome work!

    enhancement 
    opened by ellisonbg 17
  • working on jupyter but not jupyterhub

    working on jupyter but not jupyterhub

    I love the idea of sorting and filtering my dataframes in the notebooks directly. i tried to install qgrid on my local and on a remote system on jupyterhub. without success.

    what i did I did pip3 install qgrid and after importing qgrid I tried a qgrid.show_grid(df) right away. no success, no output. so i additionally ran: qgrid.nbinstall(overwrite=True) i read about in the demo.

    symptoms are

    • it can't access the css and js files: https://blabla.com/hub/nbextensions/qgridjs/lib/slick.grid.css Failed to load resource: the server responded with a status of 404 (Not Found) in the chrome console and I receive a 404 in the logfiles of jupyterhub for those files:
    • if i use jupyter notebook with jupyter notebook instead of jupyterhub on my local system it works and everything is loaded correctly
    • if i use jupyterhub and start show_grid with show_toolbar=True parameter and click on Export. qgrid is loaded all of a sudden and everything is loaded.

    any idea where i can look into? thanks

    opened by sektionschef 16
  • Update qgrid for jupyterlab

    Update qgrid for jupyterlab

    Credit to @qzchenwl via https://github.com/quantopian/qgrid/pull/262 for the work.

    • Bump dependencies (maintaining support for older jupyters/labs)
    • bump version
    • update css for lab
    opened by gmanoim-quantopian 12
  • qgrid not showing in lupyter lab notebook

    qgrid not showing in lupyter lab notebook

    Environment

    windows 10 pro with latest anaconda3

    • Python Version: Python 3.7.4
    • conda install qgrid
    • Python packages:

    # Name                    Version                   Build  Channel
    _ipyw_jlab_nb_ext_conf    0.1.0                    py37_0
    alabaster                 0.7.12                   py37_0
    anaconda                  2019.10                  py37_0
    anaconda-client           1.7.2                    py37_0
    anaconda-navigator        1.9.7                    py37_0
    anaconda-project          0.8.3                      py_0
    asn1crypto                1.0.1                    py37_0
    astroid                   2.3.1                    py37_0
    astropy                   3.2.1            py37he774522_0
    atomicwrites              1.3.0                    py37_1
    attrs                     19.2.0                     py_0
    babel                     2.7.0                      py_0
    backcall                  0.1.0                    py37_0
    backports                 1.0                        py_2
    backports.functools_lru_cache 1.6.1                      py_0
    backports.os              0.1.1                    py37_0
    backports.shutil_get_terminal_size 1.0.0                    py37_2
    backports.tempfile        1.0                        py_1
    backports.weakref         1.0.post1                  py_1
    beautifulsoup4            4.8.0                    py37_0
    bitarray                  1.0.1            py37he774522_0
    bkcharts                  0.2                      py37_0
    blas                      1.0                         mkl
    bleach                    3.1.0                    py37_0
    blosc                     1.16.3               h7bd577a_0
    bokeh                     1.3.4                    py37_0
    boto                      2.49.0                   py37_0
    bottleneck                1.2.1            py37h452e1ab_1
    bzip2                     1.0.8                he774522_0
    ca-certificates           2019.8.28                     0
    certifi                   2019.9.11                py37_0
    cffi                      1.12.3           py37h7a1dbc1_0
    chardet                   3.0.4                 py37_1003
    click                     7.0                      py37_0
    cloudpickle               1.2.2                      py_0
    clyent                    1.2.2                    py37_1
    colorama                  0.4.1                    py37_0
    comtypes                  1.1.7                    py37_0
    conda-package-handling    1.6.0            py37h62dcd97_0
    conda-verify              3.4.2                      py_1
    console_shortcut          0.1.1                         3
    contextlib2               0.6.0                      py_0
    cryptography              2.7              py37h7a1dbc1_0
    curl                      7.65.3               h2a8f88b_0
    cycler                    0.10.0                   py37_0
    cython                    0.29.13          py37ha925a31_0
    cytoolz                   0.10.0           py37he774522_0
    dask                      2.5.2                      py_0
    dask-core                 2.5.2                      py_0
    decorator                 4.4.0                    py37_1
    defusedxml                0.6.0                      py_0
    distributed               2.5.2                      py_0
    docutils                  0.15.2                   py37_0
    entrypoints               0.3                      py37_0
    et_xmlfile                1.0.1                    py37_0
    fastcache                 1.1.0            py37he774522_0
    filelock                  3.0.12                     py_0
    flask                     1.1.1                      py_0
    freetype                  2.9.1                ha9979f8_1
    fsspec                    0.5.2                      py_0
    future                    0.18.2                   py37_0
    get_terminal_size         1.0.0                h38e98db_0
    gevent                    1.4.0            py37he774522_0
    glob2                     0.7                        py_0
    greenlet                  0.4.15           py37hfa6e2cd_0
    h5py                      2.9.0            py37h5e291fa_0
    hdf5                      1.10.4               h7ebc959_0
    heapdict                  1.0.1                      py_0
    html5lib                  1.0.1                    py37_0
    icc_rt                    2019.0.0             h0cc432a_1
    icu                       58.2                 ha66f8fd_1
    idna                      2.8                      py37_0
    imageio                   2.6.0                    py37_0
    imagesize                 1.1.0                    py37_0
    importlib_metadata        0.23                     py37_0
    intel-openmp              2019.4                      245
    ipykernel                 5.1.2            py37h39e3cac_0
    ipython                   7.8.0            py37h39e3cac_0
    ipython_genutils          0.2.0                    py37_0
    ipywidgets                7.5.1                      py_0
    isort                     4.3.21                   py37_0
    itsdangerous              1.1.0                    py37_0
    jdcal                     1.4.1                      py_0
    jedi                      0.15.1                   py37_0
    jinja2                    2.10.3                     py_0
    joblib                    0.13.2                   py37_0
    jpeg                      9b                   hb83a4c4_2
    json5                     0.8.5                      py_0
    jsonschema                3.0.2                    py37_0
    jupyter                   1.0.0                    py37_7
    jupyter_client            5.3.3                    py37_1
    jupyter_console           6.0.0                    py37_0
    jupyter_core              4.5.0                      py_0
    jupyterlab                1.1.4              pyhf63ae98_0
    jupyterlab_server         1.0.6                      py_0
    keyring                   18.0.0                   py37_0
    kiwisolver                1.1.0            py37ha925a31_0
    krb5                      1.16.1               hc04afaa_7
    lazy-object-proxy         1.4.2            py37he774522_0
    libarchive                3.3.3                h0643e63_5
    libcurl                   7.65.3               h2a8f88b_0
    libiconv                  1.15                 h1df5818_7
    liblief                   0.9.0                ha925a31_2
    libpng                    1.6.37               h2a8f88b_0
    libsodium                 1.0.16               h9d3ae62_0
    libssh2                   1.8.2                h7a1dbc1_0
    libtiff                   4.0.10               hb898794_2
    libxml2                   2.9.9                h464c3ec_0
    libxslt                   1.1.33               h579f668_0
    llvmlite                  0.29.0           py37ha925a31_0
    locket                    0.2.0                    py37_1
    lxml                      4.4.1            py37h1350720_0
    lz4-c                     1.8.1.2              h2fa13f4_0
    lzo                       2.10                 h6df0209_2
    m2w64-gcc-libgfortran     5.3.0                         6
    m2w64-gcc-libs            5.3.0                         7
    m2w64-gcc-libs-core       5.3.0                         7
    m2w64-gmp                 6.1.0                         2
    m2w64-libwinpthread-git   5.0.0.4634.697f757               2
    markupsafe                1.1.1            py37he774522_0
    matplotlib                3.1.1            py37hc8f65d3_0
    mccabe                    0.6.1                    py37_1
    menuinst                  1.4.16           py37he774522_0
    mistune                   0.8.4            py37he774522_0
    mkl                       2019.4                      245
    mkl-service               2.3.0            py37hb782905_0
    mkl_fft                   1.0.14           py37h14836fe_0
    mkl_random                1.1.0            py37h675688f_0
    mock                      3.0.5                    py37_0
    more-itertools            7.2.0                    py37_0
    mpmath                    1.1.0                    py37_0
    msgpack-python            0.6.1            py37h74a9793_1
    msys2-conda-epoch         20160418                      1
    multipledispatch          0.6.0                    py37_0
    navigator-updater         0.2.1                    py37_0
    nbconvert                 5.6.0                    py37_1
    nbformat                  4.4.0                    py37_0
    networkx                  2.3                        py_0
    nltk                      3.4.5                    py37_0
    nose                      1.3.7                    py37_2
    notebook                  6.0.1                    py37_0
    numba                     0.45.1           py37hf9181ef_0
    numexpr                   2.7.0            py37hdce8814_0
    numpy                     1.16.5           py37h19fb1c0_0
    numpy-base                1.16.5           py37hc3f5095_0
    numpydoc                  0.9.1                      py_0
    olefile                   0.46                     py37_0
    openpyxl                  3.0.0                      py_0
    openssl                   1.1.1d               he774522_2
    packaging                 19.2                       py_0
    pandas                    0.25.1           py37ha925a31_0
    pandas_datareader         0.7.0                    py37_0    delichon
    pandoc                    2.2.3.2                       0
    pandocfilters             1.4.2                    py37_1
    parso                     0.5.1                      py_0
    partd                     1.0.0                      py_0
    path.py                   12.0.1                     py_0
    pathlib2                  2.3.5                    py37_0
    patsy                     0.5.1                    py37_0
    pep8                      1.7.1                    py37_0
    pickleshare               0.7.5                    py37_0
    pillow                    6.2.0            py37hdc69c19_0
    pip                       19.2.3                   py37_0
    pkginfo                   1.5.0.1                  py37_0
    pluggy                    0.13.0                   py37_0
    ply                       3.11                     py37_0
    powershell_shortcut       0.0.1                         2
    prometheus_client         0.7.1                      py_0
    prompt_toolkit            2.0.10                     py_0
    psutil                    5.6.3            py37he774522_0
    py                        1.8.0                    py37_0
    py-lief                   0.9.0            py37ha925a31_2
    pycodestyle               2.5.0                    py37_0
    pycosat                   0.6.3            py37hfa6e2cd_0
    pycparser                 2.19                     py37_0
    pycrypto                  2.6.1            py37hfa6e2cd_9
    pycurl                    7.43.0.3         py37h7a1dbc1_0
    pyflakes                  2.1.1                    py37_0
    pygments                  2.4.2                      py_0
    pylint                    2.4.2                    py37_0
    pyodbc                    4.0.27           py37ha925a31_0
    pyopenssl                 19.0.0                   py37_0
    pyparsing                 2.4.2                      py_0
    pyqt                      5.9.2            py37h6538335_2
    pyreadline                2.1                      py37_1
    pyrsistent                0.15.4           py37he774522_0
    pysocks                   1.7.1                    py37_0
    pytables                  3.5.2            py37h1da0976_1
    pytest                    5.2.1                    py37_0
    pytest-arraydiff          0.3              py37h39e3cac_0
    pytest-astropy            0.5.0                    py37_0
    pytest-doctestplus        0.4.0                      py_0
    pytest-openfiles          0.4.0                      py_0
    pytest-remotedata         0.3.2                    py37_0
    python                    3.7.4                h5263a28_0
    python-dateutil           2.8.0                    py37_0
    python-libarchive-c       2.8                     py37_13
    pytz                      2019.3                     py_0
    pywavelets                1.0.3            py37h8c2d366_1
    pywin32                   223              py37hfa6e2cd_1
    pywinpty                  0.5.5                 py37_1000
    pyyaml                    5.1.2            py37he774522_0
    pyzmq                     18.1.0           py37ha925a31_0
    qgrid                     1.1.1                    py37_2
    qt                        5.9.7            vc14h73c81de_0
    qtawesome                 0.6.0                      py_0
    qtconsole                 4.5.5                      py_0
    qtpy                      1.9.0                      py_0
    requests                  2.22.0                   py37_0
    rope                      0.14.0                     py_0
    ruamel_yaml               0.15.46          py37hfa6e2cd_0
    scikit-image              0.15.0           py37ha925a31_0
    scikit-learn              0.21.3           py37h6288b17_0
    scipy                     1.3.1            py37h29ff71c_0
    seaborn                   0.9.0                    py37_0
    send2trash                1.5.0                    py37_0
    setuptools                41.4.0                   py37_0
    simplegeneric             0.8.1                    py37_2
    singledispatch            3.4.0.3                  py37_0
    sip                       4.19.8           py37h6538335_0
    six                       1.12.0                   py37_0
    snappy                    1.1.7                h777316e_3
    snowballstemmer           2.0.0                      py_0
    sortedcollections         1.1.2                    py37_0
    sortedcontainers          2.1.0                    py37_0
    soupsieve                 1.9.3                    py37_0
    sphinx                    2.2.0                      py_0
    sphinxcontrib             1.0                      py37_1
    sphinxcontrib-applehelp   1.0.1                      py_0
    sphinxcontrib-devhelp     1.0.1                      py_0
    sphinxcontrib-htmlhelp    1.0.2                      py_0
    sphinxcontrib-jsmath      1.0.1                      py_0
    sphinxcontrib-qthelp      1.0.2                      py_0
    sphinxcontrib-serializinghtml 1.1.3                      py_0
    sphinxcontrib-websupport  1.1.2                      py_0
    spyder                    3.3.6                    py37_0
    spyder-kernels            0.5.2                    py37_0
    sqlalchemy                1.3.9            py37he774522_0
    sqlite                    3.30.0               he774522_0
    statsmodels               0.10.1           py37h8c2d366_0
    sympy                     1.4                      py37_0
    tbb                       2019.4               h74a9793_0
    tblib                     1.4.0                      py_0
    terminado                 0.8.2                    py37_0
    testpath                  0.4.2                    py37_0
    tk                        8.6.8                hfa6e2cd_0
    toolz                     0.10.0                     py_0
    tornado                   6.0.3            py37he774522_0
    tqdm                      4.36.1                     py_0
    traitlets                 4.3.3                    py37_0
    unicodecsv                0.14.1                   py37_0
    urllib3                   1.24.2                   py37_0
    vc                        14.1                 h0510ff6_4
    vs2015_runtime            14.16.27012          hf0eaf9b_0
    wcwidth                   0.1.7                    py37_0
    webencodings              0.5.1                    py37_1
    werkzeug                  0.16.0                     py_0
    wheel                     0.33.6                   py37_0
    widgetsnbextension        3.5.1                    py37_0
    win_inet_pton             1.1.0                    py37_0
    win_unicode_console       0.5                      py37_0
    wincertstore              0.2                      py37_0
    winpty                    0.4.3                         4
    wrapt                     1.11.2           py37he774522_0
    xlrd                      1.2.0                    py37_0
    xlsxwriter                1.2.1                      py_0
    xlwings                   0.15.10                  py37_0
    xlwt                      1.3.0                    py37_0
    xz                        5.2.4                h2fa13f4_4
    yaml                      0.1.7                hc54c509_2
    zeromq                    4.3.1                h33f27b4_3
    zict                      1.0.0                      py_0
    zipp                      0.6.0                      py_0
    zlib                      1.2.11               h62dcd97_3
    zstd                      1.3.7                h508b16e_0
    
    • Jupyter lab packages (if applicable): $ jupyter labextension list JupyterLab v1.1.4 No installed extensions

    Description of Issue

    open anaconda3 command prompt from start menu $jupyter lab

    enter this code in a cell
    import pandas as pd
    import qgrid
    df = pd.DataFrame({"a": [1, 2, 3, 4], "b": [5, 6, 7, 8]})
    grid = qgrid.show_grid(df)
    grid
    
    • Instead of seeing data, I got this

    QgridWidget(grid_options={'fullWidthRows': True, 'syncColumnCellResize': True, 'forceFitColumns': True, 'defau…

    What steps have you taken to resolve this already?

    I tried starting a jupyter notebook by: 1)opening an anaconda3 command window by selecting 'Anaconda3 prompt' from the start menu 2)$jupyter notebook 3) and enter the above code into a cell, I get

    ---------------------------------------------------------------------------
    AttributeError                            Traceback (most recent call last)
    <ipython-input-1-0e27154c6e2d> in <module>
          2 import qgrid
          3 df = pd.DataFrame({"a": [1, 2, 3, 4], "b": [5, 6, 7, 8]})
    ----> 4 grid = qgrid.show_grid(df)
          5 grid
    
    ~\Anaconda3\envs\TF\lib\site-packages\qgrid\grid.py in show_grid(data_frame, show_toolbar, precision, grid_options, column_options, column_definitions, row_edit_callback)
        509                        column_definitions=column_definitions,
        510                        row_edit_callback=row_edit_callback,
    --> 511                        show_toolbar=show_toolbar)
        512 
        513 
    
    ~\Anaconda3\envs\TF\lib\site-packages\qgrid\grid.py in __init__(self, *args, **kwargs)
        625 
        626         if self.df is not None:
    --> 627             self._update_df()
        628 
        629     def _grid_options_default(self):
    
    ~\Anaconda3\envs\TF\lib\site-packages\qgrid\grid.py in _update_df(self)
        818         self._unfiltered_df = self._df.copy()
        819 
    --> 820         self._update_table(update_columns=True, fire_data_change_event=False)
        821         self._ignore_df_changed = False
        822 
    
    ~\Anaconda3\envs\TF\lib\site-packages\qgrid\grid.py in _update_table(self, update_columns, triggered_by, scroll_to_row, fire_data_change_event)
        877                        isinstance(col_series, pd.PeriodIndex)
        878 
    --> 879             if type(df.index) == pd.core.index.MultiIndex:
        880                 self._multi_index = True
        881                 for idx, cur_level in enumerate(df.index.levels):
    
    AttributeError: module 'pandas.core' has no attribute 'index'
    

    Entering this command in an anaconda3 command window jupyter nbextension enable --py --sys-prefix qgrid

    gives Enabling notebook extension qgrid/extension... - Validating: ok ...

    Anything else?

    PLEASE NOTE: the windows start menu has a bunch of entries in the Anaconda3 folder. There is an Anaconda Prompt entry, an Anaconda Powershell Prompt entry, an Anaconda Navigator entry and a Jupyter notebook entry.

    I CAN get qgrid to work if I open a notebook directly in Windows by going to the start menu and selecting the jupyter notebook menu entry and using the above code. I CAN also get qgrid to word if I open an Anaconda Powershell prompt and type 'jupyter notebook' at the prompt. However typing jupyter lab and then starting a notebook and entering the code above only gives QgridWidget(grid_options={'fullWidthRows': True, 'syncColumnCellResize': True, 'forceFitColumns': True, 'defau…

    opened by bwanaaa 11
  • Javascript inconsistent between PyPI and npm/unpkg

    Javascript inconsistent between PyPI and npm/unpkg

    Environment

    • Operating System: Ubuntu
    • Python Version: 3.7.4
    • How did you install Qgrid: pip
    • Python packages: qgrid 1.2.0, notebook 6.0.3, voila 0.1.20
    • Jupyter lab packages (if applicable): N/A

    Description of Issue

    Qgrid widget does not display in Voila in certain scenarios. Please see ongoing discussion at https://github.com/voila-dashboards/voila/issues/72. A couple people identified a workaround where they changed the first line of qgrid/index.js from this (which is what you get from PyPI):

    define(["@jupyter-widgets/base","base/js/dialog"], ...

    to this (which is what you get from unpkg.com):

    define(["@jupyter-widgets/base"], ...

    Reproduction Steps

    1. Install voila and qgrid and enable extensions
    2. Turn off your internet to prevent Voila's fallback to unpkg.com
    3. Qgrid widget will not display

    What steps have you taken to resolve this already?

    See my recent comment in the Voila thread.

    Anything else?

    We love qgrid but would prefer to avoid patching it! :)

    opened by jeffyjefflabs 11
  • Support for JupyterLab 2

    Support for JupyterLab 2

    Fixes #299. JupyterLab 2.0.0 is out, and this jupyterlab extension have conflicting dependencies. Note that the failing CI test is related to #300 which is not associated with this PR.

    References for JupyterLab extension migration

    PR summary

    • Dependency bumps and refactoring.
    • Moved various webpack loaders from being dependencies to being devDependencies.
    • Updated a development setup note in the README.
    • Bumped package.json's version to 1.1.3, and setup.py's imported version to 1.3.1.

    Try PR

    conda install jupyterlab=2
    jupyter labextension update @jupyter-widgets/jupyterlab-manager
    
    git clone https://github.com/consideratio/qgrid
    cd qgrid
    git checkout jlab2
    
    pip install -e .
    jlpm install --cwd ./js # like npm install ./js but with guaranteed to use jupyterlab's node
    jupyter labextension link ./js
    
    jupyter lab
    
    # code in a cell
    import qgrid
    import pandas as pd
    df = pd.DataFrame({'X':[78,85,96,80,86], 'Y':[84,94,89,83,86],'Z':[86,97,96,72,83]});
    qgrid.show_grid(df, show_toolbar=True)
    

    Todo after merge

    • Fix #300 - a pytest is failing in master currently, which is the same failure noticed in this PR.
    • Release version 1.1.3 of the npm package.
    • Release version 1.3.1 of the python package. It has been referencing a hardcoded version of the labextension 1.1.1 before, so when the 1.1.2 was released, that made it fail to accept being used together with it. After this PR, we reference 1.1.3 instead.

    Screenshot

    image

    opened by consideRatio 10
  • Show_grid shows Loading Widget forever

    Show_grid shows Loading Widget forever

    Environment

    • Operating System: Mac Mojave (10.14.5)
    • Python Version: $ python 3.6
    • How did you install Qgrid: I have done both conda install and pip install.
    • Python packages: Pip Freeze.txt JupterLab Extensions.txt (Which for whatever reason say that don't exist but I definitely put them in.)
    Screen Shot 2019-07-03 at 2 21 50 PM

    Description of Issue

    • What did you expect to happen?
    • I expected to see my DataFrame to be seen in the filter widget.
    • What happened instead?
    • It says "Loading widget..." (Also for whatever reason nbinstall doesn't exist on qgrid.)

    Reproduction Steps

    1. Setting up a quick conda env with those dependencies in "Pip Freeze"

    What steps have you taken to resolve this already?

    1. Started multiple fresh environments.
    2. Nuked all of my conda environments and got a clean install to find it still not working. ...

    Anything else?

    I am trying to embed this into another project I am working on. By any chance can I get access to the features and there associated filtered values that are to create the new DataFrame?

    Ex: Filtered Feature: Age: -----"<": ----------60 -----">": ----------5 ...

    opened by EricCacciavillani 10
  • REPO IS NO LONGER MAINTAINED AND DOES NOT SUPPORT JUPYTERLAB>=3.0.0

    REPO IS NO LONGER MAINTAINED AND DOES NOT SUPPORT JUPYTERLAB>=3.0.0

    I just spent quite a while setting up an environment and troubleshooting different issues, when I realized that this repo is no maintained and does not support any recent version of jupyterlab.

    opened by pmarcellino 0
  • qgrid post link fails on environment build

    qgrid post link fails on environment build

    Environment

    • Operating System: Linux (CentOS)
    • Python Version: 3.8.13
    • How did you install Qgrid: conda environment file
    • Python packages: https://github.com/tardis-sn/tardis/blob/master/tardis_env3.yml

    Description of Issue

    qgrid causes the environment solve to fail with a post-link script crash:

    location of failed script: /home/afullard/.conda/envs/tardis2/bin/.qgrid-post-link.sh
    ==> script messages <==
    <None>
    ==> script output <==
    stdout: 
    stderr: 
    return code: 1```
    
    ### Reproduction Steps
    
    1. `conda env create -f tardis_env3.yml`
    
    ### What steps have you taken to resolve this already?
    
    Removing qgrid from the environment file solves the issue, but is obviously unsatisfactory.
    
    opened by andrewfullard 2
  • Status bar feature with current row count - way simpler EDA

    Status bar feature with current row count - way simpler EDA

    small addition to get a statusbar when running with show_statusbar=True. It shows the number of rows currently available - which helps a lot with exploring a dataset (EDA), e.g. when setting a filter and getting an idea about the percentage of the full data matching an additional criterion. Example: have a sales data set, see 1M rows, set filter for "Europe", see 200k rows. plus: avoid layout issues in new grid or jquery (write <i></i> instead of <i /> which is misinterpreted)

    opened by sebastianrothbucher 0
  • update for ipywidgets 8 compatibility

    update for ipywidgets 8 compatibility

    according to https://github.com/jupyter-widgets/ipywidgets/issues/3031

    this line should have its parenthesis removed:

    https://github.com/quantopian/qgrid/blob/877b420d3bd83297bbcc97202b914001a85afff2/qgrid/grid.py#L524

    This is broken now with ipywidgets version 8.0 released yesterday

    opened by qci-amos 1
  • qgrid not working in Binder notebook

    qgrid not working in Binder notebook

    Hello,

    I'm trying to get qgrid to work on a jupyter python notebook that I need to share with some colleagues. I'm new to bynder, and tried to follow some examples, but maybe some things have changed. I always end up with the Error displaying widget: model not found message.

    The repo is located at https://github.com/CarlosGrohmann/DEMIX_wine_contest

    the bynder is this one: https://mybinder.org/v2/gh/CarlosGrohmann/DEMIX_wine_contest/HEAD?labpath=wine_contest.ipynb

    This is my environment.yml:

    name: demix-env
    channels:
      - conda-forge
      - defaults
    dependencies:
      - jupyterlab
      - python
      - numpy
      - qgrid
      - matplotlib
      - nodejs
      - pip
      - pip:
        - npm
        - ipywidgets
        - pandas
        - seaborn
        - qgrid
        - scipy
        - jupyter_contrib_nbextensions 
    

    and this is postBuild

    #!/bin/bash
    jupyter labextension install @ jupyter-widgets / jupyterlab-manager --no-build
    jupyter labextension install @ 8080labs / qgrid --no-build
    
    jupyter nbextension enable --py --sys-prefix qgrid
    jupyter nbextension enable --py --sys-prefix widgetsnbextension
    
    jupyter lab build --minimize=False
    

    Python packages:

    # packages in environment at /srv/conda/envs/notebook:
    #
    # Name                    Version                   Build  Channel
    _libgcc_mutex             0.1                 conda_forge    conda-forge
    _openmp_mutex             4.5                       1_gnu    conda-forge
    alembic                   1.7.5              pyhd8ed1ab_0    conda-forge
    alsa-lib                  1.2.3                h516909a_0    conda-forge
    anyio                     3.5.0           py310hff52083_0    conda-forge
    argon2-cffi               21.3.0             pyhd8ed1ab_0    conda-forge
    argon2-cffi-bindings      21.2.0          py310h6acc77f_1    conda-forge
    asttokens                 2.0.5              pyhd8ed1ab_0    conda-forge
    async_generator           1.10                       py_0    conda-forge
    attrs                     21.4.0             pyhd8ed1ab_0    conda-forge
    babel                     2.9.1              pyh44b312d_0    conda-forge
    backcall                  0.2.0              pyh9f0ad1d_0    conda-forge
    backports                 1.0                        py_2    conda-forge
    backports.functools_lru_cache 1.6.4              pyhd8ed1ab_0    conda-forge
    beautifulsoup4            4.10.0             pyha770c72_0    conda-forge
    bleach                    4.1.0              pyhd8ed1ab_0    conda-forge
    blinker                   1.4                        py_1    conda-forge
    brotli                    1.0.9                h7f98852_6    conda-forge
    brotli-bin                1.0.9                h7f98852_6    conda-forge
    brotlipy                  0.7.0           py310h6acc77f_1003    conda-forge
    bzip2                     1.0.8                h7f98852_4    conda-forge
    c-ares                    1.18.1               h7f98852_0    conda-forge
    ca-certificates           2021.10.8            ha878542_0    conda-forge
    certifi                   2021.10.8       py310hff52083_1    conda-forge
    certipy                   0.1.3                      py_0    conda-forge
    cffi                      1.15.0          py310h0fdd8cc_0    conda-forge
    charset-normalizer        2.0.10             pyhd8ed1ab_0    conda-forge
    cryptography              36.0.1          py310h685ca39_0    conda-forge
    cycler                    0.11.0             pyhd8ed1ab_0    conda-forge
    dbus                      1.13.6               h5008d03_3    conda-forge
    debugpy                   1.5.1           py310h122e73d_0    conda-forge
    decorator                 5.1.1              pyhd8ed1ab_0    conda-forge
    defusedxml                0.7.1              pyhd8ed1ab_0    conda-forge
    entrypoints               0.3             pyhd8ed1ab_1003    conda-forge
    executing                 0.8.3              pyhd8ed1ab_0    conda-forge
    expat                     2.4.7                h27087fc_0    conda-forge
    flit-core                 3.6.0              pyhd8ed1ab_0    conda-forge
    font-ttf-dejavu-sans-mono 2.37                 hab24e00_0    conda-forge
    font-ttf-inconsolata      3.000                h77eed37_0    conda-forge
    font-ttf-source-code-pro  2.038                h77eed37_0    conda-forge
    font-ttf-ubuntu           0.83                 hab24e00_0    conda-forge
    fontconfig                2.13.96              h8e229c2_2    conda-forge
    fonts-conda-ecosystem     1                             0    conda-forge
    fonts-conda-forge         1                             0    conda-forge
    fonttools                 4.30.0          py310h5764c6d_0    conda-forge
    freetype                  2.10.4               h0708190_1    conda-forge
    gettext                   0.19.8.1          h73d1719_1008    conda-forge
    giflib                    5.2.1                h36c2ea0_2    conda-forge
    greenlet                  1.1.2           py310h122e73d_1    conda-forge
    gst-plugins-base          1.18.5               hf529b03_3    conda-forge
    gstreamer                 1.18.5               h9f60fe5_3    conda-forge
    icu                       69.1                 h9c3ff4c_0    conda-forge
    idna                      3.3                pyhd8ed1ab_0    conda-forge
    importlib-metadata        4.11.2          py310hff52083_0    conda-forge
    importlib_resources       5.4.0              pyhd8ed1ab_0    conda-forge
    ipykernel                 6.9.1           py310hfdc917e_0    conda-forge
    ipython                   8.1.1           py310hff52083_0    conda-forge
    ipython_genutils          0.2.0                      py_1    conda-forge
    ipywidgets                7.6.5              pyhd8ed1ab_0    conda-forge
    jbig                      2.1               h7f98852_2003    conda-forge
    jedi                      0.18.1          py310hff52083_0    conda-forge
    jinja2                    3.0.3              pyhd8ed1ab_0    conda-forge
    jpeg                      9e                   h7f98852_0    conda-forge
    json5                     0.9.5              pyh9f0ad1d_0    conda-forge
    jsonschema                4.4.0              pyhd8ed1ab_0    conda-forge
    jupyter-contrib-core      0.3.3                    pypi_0    pypi
    jupyter-contrib-nbextensions 0.5.1                    pypi_0    pypi
    jupyter-highlight-selected-word 0.2.0                    pypi_0    pypi
    jupyter-latex-envs        1.4.6                    pypi_0    pypi
    jupyter-nbextensions-configurator 0.4.1                    pypi_0    pypi
    jupyter-offlinenotebook   0.2.2              pyh1d7be83_0    conda-forge
    jupyter-resource-usage    0.6.1              pyhd8ed1ab_0    conda-forge
    jupyter_client            7.1.2              pyhd8ed1ab_0    conda-forge
    jupyter_core              4.9.2           py310hff52083_0    conda-forge
    jupyter_server            1.13.4             pyhd8ed1ab_0    conda-forge
    jupyter_telemetry         0.1.0              pyhd8ed1ab_1    conda-forge
    jupyterhub-base           2.2.1              pyhd8ed1ab_0    conda-forge
    jupyterhub-singleuser     2.2.1                hd8ed1ab_0    conda-forge
    jupyterlab                3.3.1              pyhd8ed1ab_0    conda-forge
    jupyterlab_pygments       0.1.2              pyh9f0ad1d_0    conda-forge
    jupyterlab_server         2.10.3             pyhd8ed1ab_0    conda-forge
    jupyterlab_widgets        1.0.2              pyhd8ed1ab_0    conda-forge
    kiwisolver                1.3.2           py310h91b1402_1    conda-forge
    krb5                      1.19.2               hcc1bbae_3    conda-forge
    lcms2                     2.12                 hddcbb42_0    conda-forge
    ld_impl_linux-64          2.36.1               hea4e1c9_2    conda-forge
    lerc                      3.0                  h9c3ff4c_0    conda-forge
    libblas                   3.9.0           13_linux64_openblas    conda-forge
    libbrotlicommon           1.0.9                h7f98852_6    conda-forge
    libbrotlidec              1.0.9                h7f98852_6    conda-forge
    libbrotlienc              1.0.9                h7f98852_6    conda-forge
    libcblas                  3.9.0           13_linux64_openblas    conda-forge
    libclang                  13.0.1          default_hc23dcda_0    conda-forge
    libcurl                   7.81.0               h2574ce0_0    conda-forge
    libdeflate                1.10                 h7f98852_0    conda-forge
    libedit                   3.1.20191231         he28a2e2_2    conda-forge
    libev                     4.33                 h516909a_1    conda-forge
    libevent                  2.1.10               h9b69904_4    conda-forge
    libffi                    3.4.2                h7f98852_5    conda-forge
    libgcc-ng                 11.2.0              h1d223b6_12    conda-forge
    libgfortran-ng            11.2.0              h69a702a_13    conda-forge
    libgfortran5              11.2.0              h5c6108e_13    conda-forge
    libglib                   2.70.2               h174f98d_4    conda-forge
    libgomp                   11.2.0              h1d223b6_12    conda-forge
    libiconv                  1.16                 h516909a_0    conda-forge
    liblapack                 3.9.0           13_linux64_openblas    conda-forge
    libllvm13                 13.0.1               hf817b99_2    conda-forge
    libnghttp2                1.43.0               h812cca2_1    conda-forge
    libnsl                    2.0.0                h7f98852_0    conda-forge
    libogg                    1.3.4                h7f98852_1    conda-forge
    libopenblas               0.3.18          pthreads_h8fe5266_0    conda-forge
    libopus                   1.3.1                h7f98852_1    conda-forge
    libpng                    1.6.37               h21135ba_2    conda-forge
    libpq                     14.2                 hd57d9b9_0    conda-forge
    libsodium                 1.0.18               h36c2ea0_1    conda-forge
    libssh2                   1.10.0               ha56f1ee_2    conda-forge
    libstdcxx-ng              11.2.0              he4da1e4_12    conda-forge
    libtiff                   4.3.0                h542a066_3    conda-forge
    libuuid                   2.32.1            h7f98852_1000    conda-forge
    libuv                     1.43.0               h7f98852_0    conda-forge
    libvorbis                 1.3.7                h9c3ff4c_0    conda-forge
    libwebp                   1.2.2                h3452ae3_0    conda-forge
    libwebp-base              1.2.2                h7f98852_1    conda-forge
    libxcb                    1.13              h7f98852_1004    conda-forge
    libxkbcommon              1.0.3                he3ba5ed_0    conda-forge
    libxml2                   2.9.12               h885dcf4_1    conda-forge
    libzlib                   1.2.11            h36c2ea0_1013    conda-forge
    lxml                      4.8.0                    pypi_0    pypi
    lz4-c                     1.9.3                h9c3ff4c_1    conda-forge
    mako                      1.1.6              pyhd8ed1ab_0    conda-forge
    markupsafe                2.1.0           py310h5764c6d_1    conda-forge
    matplotlib                3.5.1           py310hff52083_0    conda-forge
    matplotlib-base           3.5.1           py310h23f4a51_0    conda-forge
    matplotlib-inline         0.1.3              pyhd8ed1ab_0    conda-forge
    mistune                   0.8.4           py310h6acc77f_1005    conda-forge
    munkres                   1.1.4              pyh9f0ad1d_0    conda-forge
    mysql-common              8.0.28               ha770c72_0    conda-forge
    mysql-libs                8.0.28               hfa10184_0    conda-forge
    nbclassic                 0.3.5              pyhd8ed1ab_0    conda-forge
    nbclient                  0.5.10             pyhd8ed1ab_1    conda-forge
    nbconvert                 6.4.4           py310hff52083_0    conda-forge
    nbformat                  5.1.3              pyhd8ed1ab_0    conda-forge
    ncurses                   6.3                  h9c3ff4c_0    conda-forge
    nest-asyncio              1.5.4              pyhd8ed1ab_0    conda-forge
    nodejs                    17.4.0               h8ca31f7_0    conda-forge
    notebook                  6.3.0              pyha770c72_1    conda-forge
    npm                       0.1.1                    pypi_0    pypi
    nspr                      4.32                 h9c3ff4c_1    conda-forge
    nss                       3.74                 hb5efdd6_0    conda-forge
    nteract_on_jupyter        2.1.3                      py_0    conda-forge
    numpy                     1.22.3          py310h45f3432_0    conda-forge
    oauthlib                  3.1.1              pyhd8ed1ab_0    conda-forge
    openjpeg                  2.4.0                hb52868f_1    conda-forge
    openssl                   1.1.1l               h7f98852_0    conda-forge
    optional-django           0.1.0                    pypi_0    pypi
    packaging                 21.3               pyhd8ed1ab_0    conda-forge
    pamela                    1.0.0                      py_0    conda-forge
    pandas                    1.4.1           py310hb5077e9_0    conda-forge
    pandoc                    2.17.0.1             h7f98852_0    conda-forge
    pandocfilters             1.5.0              pyhd8ed1ab_0    conda-forge
    parso                     0.8.3              pyhd8ed1ab_0    conda-forge
    pcre                      8.45                 h9c3ff4c_0    conda-forge
    pexpect                   4.8.0              pyh9f0ad1d_2    conda-forge
    pickleshare               0.7.5                   py_1003    conda-forge
    pillow                    9.0.1           py310he619898_2    conda-forge
    pip                       22.0.4             pyhd8ed1ab_0    conda-forge
    prometheus_client         0.13.0             pyhd8ed1ab_0    conda-forge
    prompt-toolkit            3.0.24             pyha770c72_0    conda-forge
    psutil                    5.9.0           py310h6acc77f_0    conda-forge
    pthread-stubs             0.4               h36c2ea0_1001    conda-forge
    ptyprocess                0.7.0              pyhd3deb0d_0    conda-forge
    pure_eval                 0.2.2              pyhd8ed1ab_0    conda-forge
    pycparser                 2.21               pyhd8ed1ab_0    conda-forge
    pycurl                    7.44.1          py310ha6c063c_1    conda-forge
    pygments                  2.11.2             pyhd8ed1ab_0    conda-forge
    pyjwt                     2.3.0              pyhd8ed1ab_1    conda-forge
    pyopenssl                 21.0.0             pyhd8ed1ab_0    conda-forge
    pyparsing                 3.0.7              pyhd8ed1ab_0    conda-forge
    pyqt                      5.12.3          py310hff52083_8    conda-forge
    pyqt-impl                 5.12.3          py310h1f8e252_8    conda-forge
    pyqt5-sip                 4.19.18         py310h122e73d_8    conda-forge
    pyqtchart                 5.12            py310hfcd6d55_8    conda-forge
    pyqtwebengine             5.12.1          py310hfcd6d55_8    conda-forge
    pyrsistent                0.18.1          py310h6acc77f_0    conda-forge
    pysocks                   1.7.1           py310hff52083_4    conda-forge
    python                    3.10.2          h85951f9_4_cpython    conda-forge
    python-dateutil           2.8.2              pyhd8ed1ab_0    conda-forge
    python-json-logger        2.0.1              pyh9f0ad1d_0    conda-forge
    python_abi                3.10                    2_cp310    conda-forge
    pytz                      2021.3             pyhd8ed1ab_0    conda-forge
    pyyaml                    6.0                      pypi_0    pypi
    pyzmq                     22.3.0          py310h675a958_1    conda-forge
    qgrid                     1.3.1              pyhd8ed1ab_3    conda-forge
    qt                        5.12.9               ha98a1a1_5    conda-forge
    readline                  8.1                  h46c0cb4_0    conda-forge
    requests                  2.27.1             pyhd8ed1ab_0    conda-forge
    ruamel.yaml               0.17.21         py310h6acc77f_0    conda-forge
    ruamel.yaml.clib          0.2.6           py310h6acc77f_0    conda-forge
    scipy                     1.8.0                    pypi_0    pypi
    seaborn                   0.11.2                   pypi_0    pypi
    send2trash                1.8.0              pyhd8ed1ab_0    conda-forge
    setuptools                60.9.3          py310hff52083_0    conda-forge
    six                       1.16.0             pyh6c4a22f_0    conda-forge
    sniffio                   1.2.0           py310hff52083_2    conda-forge
    soupsieve                 2.3.1              pyhd8ed1ab_0    conda-forge
    sqlalchemy                1.4.32          py310h5764c6d_0    conda-forge
    sqlite                    3.37.0               h9cd32fc_0    conda-forge
    stack_data                0.2.0              pyhd8ed1ab_0    conda-forge
    terminado                 0.13.3          py310hff52083_0    conda-forge
    testpath                  0.5.0              pyhd8ed1ab_0    conda-forge
    tk                        8.6.12               h27826a3_0    conda-forge
    tornado                   6.1             py310h6acc77f_2    conda-forge
    traitlets                 5.1.1              pyhd8ed1ab_0    conda-forge
    typing_extensions         4.0.1              pyha770c72_0    conda-forge
    tzdata                    2021e                he74cb21_0    conda-forge
    unicodedata2              14.0.0          py310h6acc77f_0    conda-forge
    urllib3                   1.26.8             pyhd8ed1ab_1    conda-forge
    wcwidth                   0.2.5              pyh9f0ad1d_2    conda-forge
    webencodings              0.5.1                      py_1    conda-forge
    websocket-client          1.2.3              pyhd8ed1ab_0    conda-forge
    wheel                     0.37.1             pyhd8ed1ab_0    conda-forge
    widgetsnbextension        3.5.2           py310hff52083_1    conda-forge
    xorg-libxau               1.0.9                h7f98852_0    conda-forge
    xorg-libxdmcp             1.1.3                h7f98852_0    conda-forge
    xz                        5.2.5                h516909a_1    conda-forge
    zeromq                    4.3.4                h9c3ff4c_1    conda-forge
    zipp                      3.7.0              pyhd8ed1ab_0    conda-forge
    zlib                      1.2.11            h36c2ea0_1013    conda-forge
    zstd                      1.5.2                ha95c52a_0    conda-forge
    

    Jupyter extensions

    JupyterLab v3.3.1
    /srv/conda/envs/notebook/share/jupyter/labextensions
            jupyter-offlinenotebook v0.2.2 enabled OK
            @jupyter-widgets/jupyterlab-manager v3.0.1 enabled OK (python, jupyterlab_widgets)
            @jupyter-server/resource-usage v0.6.1 enabled OK (python, jupyter-resource-usage)
    

    Thanks

    opened by CarlosGrohmann 0
Releases(v1.3.1)
  • v1.3.1(Apr 7, 2020)

  • v1.3.0(Feb 25, 2020)

    What’s Changed

    • Add license to setup.py (#292) @sergiuser1
    • MAINT: Push qgrid to a new npm home (#288) @gerrymanoim
    • README item on installing lab extension from source (#289) @itcarroll
    • update grid.py for changes in pandas 1.0.1 (#290) @richdevboston
    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Dec 31, 2019)

  • v1.1.1(Jul 11, 2018)

    • Fixes an issue where the grid widget would flash noticeably when the df attribute or any other attributes were changed. This issue has existed since 1.0. (#186)
    • Make the SlickGrid object available via $('.q-grid').data('slickgrid') as suggested here: https://github.com/quantopian/qgrid/issues/178#issuecomment-371420892. This allows you to work with a particular SlickGrid instance from the js console.
    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Jul 10, 2018)

    • Column options can be provided via the show_grid method. Options can be provided for all columns via the column_options parameter, and for individual columns via the column_definitions parameter.
    • Added edit_cell, change_selection, toggle_editable methods for updating the state of an existing grid widget without having to call show_grid.
    • Updated the add_row method so that the caller can specify the values for the new row via the row parameter. This will allow people to add rows to a qgrid instance even if it's showing a DataFrame that doesn't have an integer index.
    • Updated the remove_row method so that the indices of the rows to remove can optionally be provided via the rows parameter.
    • Fixed issue where moving the scroll bar around a bunch of times quickly can cause a series of grid refreshes to occur.
    • Thanks to Abigail Hahn (vardaofthevalier) for adding many of the features in the following PR: https://github.com/quantopian/qgrid/pull/191
    Source code(tar.gz)
    Source code(zip)
  • v1.0.6-beta.6(Jun 15, 2018)

    • Fixes issue where object type columns where not being converted to strings before display when they're an index column
    • Fixes issue with displaying unicode strings in python 2 (https://github.com/quantopian/qgrid/issues/200)
    • Improves support for viewing DataFrames with a MultiIndex.
      • Cells are merged vertically (similar to how pandas does it) to make it easier to identify the levels of the index.
      • Sorting or grouping any column other than level 0 of the multi-index results in the DataFrame returning to it's normal behavior of never merging cells vertically.
      • Column header is hidden for unnamed levels of the index (instead of showing "level_0", "level_1", etc)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.5(Jun 4, 2018)

  • v1.0.4(Jun 4, 2018)

  • v1.0.3(Jun 1, 2018)

    • Adds new on and off methods at both the module-level (for listening to events on all qgrid instances) and at the instance-level (for listening to events on individual qgrid instances)
    • The on and off methods mentioned above should now be used to listen for events instead of listening for the on_value_change event of the _df attribute. In other words using qgrid_widget.observe(on_value_change, names=['_df']) for being notified about changes to the state of the grid (i.e. editing, sorting, filtering) will no longer work.
    Source code(tar.gz)
    Source code(zip)
  • v1.0.3-beta.0(May 30, 2018)

  • v1.0.2(Mar 3, 2018)

    • Fixes issue that made it impossible to set the value of a float cell to zero #174
    • Updated tests to be python 2 compatible by removing usages of nonlocal. This change will help us to simplify the coda build process.
    Source code(tar.gz)
    Source code(zip)
  • v1.0.1(Feb 18, 2018)

    • Fixes issue where qgrid prevents all other widgets from working when used on Jupyterlab (#154, #165)
    • Adds new sortable and filterable grid options which allows users to disable sorting and/or filtering for the entire grid (#164)
    • Adds new highlightSelectedCell and highlightSelectedRow which allows users to change the cell/row highlighting behavior. Setting highlightSelectedCell to True and highlightSelectedRow to False will result in spreadsheet-style cell highlighting (in response to feedback on Twitter)
    • Add processPhosphorMessage to handle resize events in Jupyterlab and when qgrid is embedded in other widgets. (#169, #167)
    • Trigger _df_changed event for filtering changes and edits. (#170)
    • Fixes an issue where the search text wouldn't be cleared in the text filter when the reset button is clicked
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Jan 7, 2018)

  • v1.0.0-beta.10(Dec 10, 2017)

    • Adds support for jupyterlab 0.30.x
    • Uses a new stable plugin API that's available in jupyterlab 0.30.x
    • Separate qgrid-jupyterlab npm package is no longer needed
    • Issue with set_defaults fixed by https://github.com/quantopian/qgrid/pull/151
    • Fix for deprecation warning that was appearing when committing edits on pandas 0.21.0
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.9(Dec 4, 2017)

    A small batch of changes to address a couple of issues:

    • Fix column ordering issue on Python 2 (#140)
    • Display NaNs instead of blank cell for missing values (#99)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.8(Nov 20, 2017)

    Fixes a number of issues that came up in beta 7:

    • Made the text column filter work as expected when a search term is applied in the filter control (#135, #144, #145)
    • Added support for columns containing multiple types of data (previously this locked up the widget when sorting) #133
    • Made the add row button works as expected when the grid is not sorted by the index #132
    • Fixed the issue where resizing a column had a side effect of clicking the column header, which resulted in a sort being triggered #134
    • Convert objects to strings before attempting to display them to fix #57
    • Added new get_selected_df method to provide a more convenient alternative to get_selected_rows which reflects any filtering/sorting changes #137
    • Bumped the required pandas version to address #139
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.7(Oct 16, 2017)

    • Makes qgrid compatible with ipywidgets 7+
    • Support for using qgrid in Jupyterhub and Jupyterlab (https://github.com/quantopian/qgrid/issues/85)
    • Editing cells via double clicking is always available now (except for on index and inteval-type columns)
    • Support for editing and filtering boolean columns (https://github.com/quantopian/qgrid/issues/95)
    • Support for larger DataFrame (1 million+ rows)
    • Added get_changed_df method to retrieve a copy of your DataFrame that reflects sorting and filtering, as well as any edits you've made. (https://github.com/quantopian/qgrid/issues/7, https://github.com/quantopian/qgrid/issues/87)
    • Added enable and disable methods to allow DataFrames and Series to be displayed as qgrids automatically. (https://github.com/quantopian/qgrid/issues/8)
    • Support for displaying interval columns, but not editing/filtering/sorting them (https://github.com/quantopian/qgrid/issues/113)
    • Added "full screen" button to allow qgrid to take up your whole browser window (https://github.com/quantopian/qgrid/issues/120)
    Source code(tar.gz)
    Source code(zip)
  • v0.3.3(Jun 12, 2017)

    • Makes qgrid compatible with ipywidgets 6+ and jupyter notebook 5.x
    • Fixes issue with double-rendering grids when show_grid is called
    Compatible with:

    | IPython / Jupyter notebook | ipywidgets | | --- | --- | | 5.x | 6.x | | 4.0 | 4.0.x | | 4.1 | 4.1.x | | 4.2 | 5.x |

    Source code(tar.gz)
    Source code(zip)
  • v0.3.2(Jun 13, 2016)

    • Makes qgrid compatible with ipywidgets 5+ and jupyter notebook 4.2.x
    • Improves installation by not requiring exact versions in requirements.txt. Previously this was causing packages in the user's environment to be downgraded unnecessarily.
    Compatible with:

    | IPython / Jupyter notebook | ipywidgets | | --- | --- | | 4.0 | 4.0.x | | 4.1 | 4.1.x | | 4.2 | 5.x |

    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Feb 22, 2016)

    • Allows users to edit a DataFrame by double clicking in the grid, as well as add/remove rows
    • Changes the architecture of qgrid so it's a deployed as a widget rather than an nbextension
    Compatible with:

    | IPython / Jupyter notebook | ipywidgets | | --- | --- | | 3.x | N/A | | 4.0 | 4.0.x | | 4.1 | 4.1.x |

    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Sep 2, 2015)

    • Allow users to pass SlickGrid options to show_grid.
    • Added set_defaults and set_grid_option, which enable users to permanently set any qgrid options (including the SlickGrid options mentioned above) for the lifetime of the kernel.
    Compatible with:

    | IPython / Jupyter notebook | ipywidgets | | --- | --- | | 2.x | N/A | | 3.x | N/A | | 4.0 | 4.0.x | | 4.1 | 4.1.x |

    Source code(tar.gz)
    Source code(zip)
Owner
Quantopian, Inc.
Quantopian builds software tools and libraries for quantitative finance.
Quantopian, Inc.
A Numba-based two-point correlation function calculator using a grid decomposition

A Numba-based two-point correlation function (2PCF) calculator using a grid decomposition. Like Corrfunc, but written in Numba, with simplicity and hackability in mind.

Lehman Garrison 3 Aug 24, 2022
An extension to pandas dataframes describe function.

pandas_summary An extension to pandas dataframes describe function. The module contains DataFrameSummary object that extend describe() with: propertie

Mourad 450 Dec 30, 2022
Python utility to extract differences between two pandas dataframes.

Python utility to extract differences between two pandas dataframes.

Jaime Valero 8 Jan 7, 2023
Useful tool for inserting DataFrames into the Excel sheet.

PyCellFrame Insert Pandas DataFrames into the Excel sheet with a bunch of conditions Install pip install pycellframe Usage Examples Let's suppose that

Luka Sosiashvili 1 Feb 16, 2022
Shot notebooks resuming the main functions of GeoPandas

Shot notebooks resuming the main functions of GeoPandas, 2 notebooks written as Exercises to apply these functions.

null 1 Jan 12, 2022
HyperSpy is an open source Python library for the interactive analysis of multidimensional datasets

HyperSpy is an open source Python library for the interactive analysis of multidimensional datasets that can be described as multidimensional arrays o

HyperSpy 411 Dec 27, 2022
A Pythonic introduction to methods for scaling your data science and machine learning work to larger datasets and larger models, using the tools and APIs you know and love from the PyData stack (such as numpy, pandas, and scikit-learn).

This tutorial's purpose is to introduce Pythonistas to methods for scaling their data science and machine learning work to larger datasets and larger models, using the tools and APIs they know and love from the PyData stack (such as numpy, pandas, and scikit-learn).

Coiled 102 Nov 10, 2022
Python Library for learning (Structure and Parameter) and inference (Statistical and Causal) in Bayesian Networks.

pgmpy pgmpy is a python library for working with Probabilistic Graphical Models. Documentation and list of algorithms supported is at our official sit

pgmpy 2.2k Dec 25, 2022
🧪 Panel-Chemistry - exploratory data analysis and build powerful data and viz tools within the domain of Chemistry using Python and HoloViz Panel.

???? ??. The purpose of the panel-chemistry project is to make it really easy for you to do DATA ANALYSIS and build powerful DATA AND VIZ APPLICATIONS within the domain of Chemistry using using Python and HoloViz Panel.

Marc Skov Madsen 97 Dec 8, 2022
Created covid data pipeline using PySpark and MySQL that collected data stream from API and do some processing and store it into MYSQL database.

Created covid data pipeline using PySpark and MySQL that collected data stream from API and do some processing and store it into MYSQL database.

null 2 Nov 20, 2021
Pandas on AWS - Easy integration with Athena, Glue, Redshift, Timestream, QuickSight, Chime, CloudWatchLogs, DynamoDB, EMR, SecretManager, PostgreSQL, MySQL, SQLServer and S3 (Parquet, CSV, JSON and EXCEL).

AWS Data Wrangler Pandas on AWS Easy integration with Athena, Glue, Redshift, Timestream, QuickSight, Chime, CloudWatchLogs, DynamoDB, EMR, SecretMana

Amazon Web Services - Labs 3.3k Jan 4, 2023
First and foremost, we want dbt documentation to retain a DRY principle. Every time we repeat ourselves, we waste our time. Second, we want to understand column level lineage and automate impact analysis.

dbt-osmosis First and foremost, we want dbt documentation to retain a DRY principle. Every time we repeat ourselves, we waste our time. Second, we wan

Alexander Butler 150 Jan 6, 2023
Statistical Analysis 📈 focused on statistical analysis and exploration used on various data sets for personal and professional projects.

Statistical Analysis ?? This repository focuses on statistical analysis and the exploration used on various data sets for personal and professional pr

Andy Pham 1 Sep 3, 2022
Spectacular AI SDK fuses data from cameras and IMU sensors and outputs an accurate 6-degree-of-freedom pose of a device.

Spectacular AI SDK examples Spectacular AI SDK fuses data from cameras and IMU sensors (accelerometer and gyroscope) and outputs an accurate 6-degree-

Spectacular AI 94 Jan 4, 2023
Working Time Statistics of working hours and working conditions by industry and company

Working Time Statistics of working hours and working conditions by industry and company

Feng Ruohang 88 Nov 4, 2022
A python package which can be pip installed to perform statistics and visualize binomial and gaussian distributions of the dataset

GBiStat package A python package to assist programmers with data analysis. This package could be used to plot : Binomial Distribution of the dataset p

Rishikesh S 4 Oct 17, 2022
ToeholdTools is a Python package and desktop app designed to facilitate analyzing and designing toehold switches, created as part of the 2021 iGEM competition.

ToeholdTools Category Status Repository Package Build Quality A library for the analysis of toehold switch riboregulators created by the iGEM team Cit

null 0 Dec 1, 2021
A collection of robust and fast processing tools for parsing and analyzing web archive data.

ChatNoir Resiliparse A collection of robust and fast processing tools for parsing and analyzing web archive data. Resiliparse is part of the ChatNoir

ChatNoir 24 Nov 29, 2022