mwouts / itables

Pandas DataFrames as Interactive DataTables
https://mwouts.github.io/itables/
MIT License
757 stars 56 forks source link

It only works on a brand new notebook #17

Closed GZR5876 closed 3 years ago

GZR5876 commented 3 years ago

When I test following codes on a new created jupyternote book, it works. however, once the note book is saved and reopen again, it no longer works. (the df table not shown, only the column headers are displayed).

Tried clear browser cache, restart kernal, restart pc, cant solve the problem. Any one has any idea on this?

Test code: import itables.interactive import world_bank_data as wb

df = wb.get_countries() df

neon-ninja commented 3 years ago

this sounds a bit like #6

mwouts commented 3 years ago

Thanks @GZR5876 for reporting this. Yes I agree, this sounds like #6. I think this is because the inclusion of the javascript code in the notebook is done very simply, possibly too simply... at least it works with nbconvert, which was not the case of widgets when I gave the first try at this projet.

Anyway, if we want to make some progress on this, maybe we should find what the javascript error is? Does your browser shows anything that could help us?

mwouts commented 3 years ago

Hi @neon-ninja , @GZR5876 , I think I understood the issue.

When the user imports itables, often in the first cell, an invisible output is displayed, which loads the datatables.net library. If the user either

then that invisible output is not there any more, and the calls to datatables.net fail.

I can think of two workarounds

  1. execute this

    from itables.javascript import load_datatables
    load_datatables()

    as the first cell. Save the notebook, and then reload it (I can't explain why we need to reload)

  2. stop the kernel and clear the outputs, save the notebook, reload the notebook, and then run the notebook

Obviously we should think of a better approach. At the moment (itables version 0.2.2) I'd probably recommend loading the JS library explicitly at the top of the notebook

from itables.javascript import load_datatables
load_datatables()

I am also having a look at how Plotly do this in the context of a Jupyter Notebook. Apparently the load of the Plotly JS library is associated to the first plot. So, if you have a notebook made of two cells:

import plotly.graph_objects as go

and

go.Figure(data=[go.Bar(y=[1,3,2])])

then

  1. if you execute the notebook, save and reload, the graph is still there
  2. if you execute the cell 2 a second time, then a) the graph is still there, until you save and reload b) when you save and reload, you need to restart the kernel and run the cell again to get the plot displayed.

So to summarize,

mwouts commented 3 years ago

This should be fixed now in itables>=0.3.0. Please note that the initialization now works a bit differently - to display all the tables interactively, you should start your notebook with

from itables import init_notebook_mode
init_notebook_mode(all_interactive=True)
mattwatkinscs commented 3 years ago

I appear to be having the exact same issue, this originally worked, but having restarted the kernel, the outputs are all blank. I'm using itables==0.3.0 and JupyterHub. I have the following 3 blocks in a fresh notebook and it works fine, yet in an existing notebook even after a kernel restart, there is no output as described above.

from itables import init_notebook_mode
init_notebook_mode(all_interactive=True)

iris = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')

iris

Existing notebook with no output even after restart: Screenshot 2021-05-14 at 11 03 56

Fresh notebook seems to work OK: Screenshot 2021-05-14 at 11 00 24

mwouts commented 3 years ago

Hi @mattwatkinscs , thank you for your input. May I ask what is the outcome if a) you restart the kernel and b) you reload the notebook (Ctrl+R)? Thanks!

caleblutru commented 3 years ago

Hi @mattwatkinscs , thank you for your input. May I ask what is the outcome if a) you restart the kernel and b) you reload the notebook (Ctrl+R)? Thanks!

I have the exact same issue. For me it is both a and b. It only works again if I shut down the kernel, close the tab for the notebook and reopen the notebook again in a new tab.