使用 jupyter 小部件保存对 pandas 数据框的点击
use jupyter widgets to save clicks on a pandas dataframe
基本上我想做的是使 pandas 数据框可点击并保存用户的点击。
考虑为此使用小部件。
到目前为止我有这个:
import pandas as pd
from IPython.display import display, HTML
from ipywidgets import widgets
df = pd.DataFrame([[1,'car'],[2,'bus'],[3,'train']])
click_list = []
display(df[:1])
button = widgets.Button(description='click')
display(button)
def obc(b):
click_list.append((pd.to_datetime('now'),1))
button.on_click(obc)
button2 = widgets.Button(description='click')
display(button2)
def obc2(b):
click_list.append((pd.to_datetime('now'),2))
display(df[1:2])
button2.on_click(obc2)
button3 = widgets.Button(description='click')
display(button3)
def obc3(b):
click_list.append((pd.to_datetime('now'),3))
display(df[2:3])
button3.on_click(obc3)
给出这个:
它具有我所追求的基本功能,但显示方式令人困惑(尤其是当我们谈论数十行时)我想要这样的东西:
或类似的,任何帮助将不胜感激
似乎 VBoxing html 显示效果不错(注意 IPython.display.HTML 和 ipywidgets.HTML 不一样)
import pandas as pd
from IPython.display import display, HTML
from ipywidgets import Button, HBox, VBox,widgets
import ipywidgets
df = pd.DataFrame([[1,'car'],[2,'bus'],[3,'train']])
click_list = []
button = widgets.Button(description='click')
def obc(b):
click_list.append((pd.to_datetime('now'),1))
button.on_click(obc)
button2 = widgets.Button(description='click')
def obc2(b):
click_list.append((pd.to_datetime('now'),2))
button2.on_click(obc2)
button3 = widgets.Button(description='click')
def obc3(b):
click_list.append((pd.to_datetime('now'),3))
button3.on_click(obc3)
display(HBox([VBox([widgets.Button(description=''),button,button2,button3]),ipywidgets.
HTML(df.style.set_table_attributes('class="table"').render())]))
有什么办法可以自动完成吗?所以它可以与未知数量的 checkboxes/rows 一起使用?下面的代码给出了一个错误:AttributeError: 'list' object has no attribute '_handle_displayed'
import pandas as pd
from IPython.display import display, HTML
from ipywidgets import Checkbox, HBox, VBox,widgets
import ipywidgets
df = pd.DataFrame(data=[['a',1],['b',32]], columns=['J1','J2'])
mydict = {}
t=0
for ts in df.J1:
mydict[str('c')+ str(t)] = widgets.Checkbox(value=False, description = 'Accepted')
t=t+1
display(HBox([VBox([widgets.Checkbox(description=''),mydict.values()]),ipywidgets.
HTML(df.style.set_table_attributes('class="table"').render())]))
基本上我想做的是使 pandas 数据框可点击并保存用户的点击。
考虑为此使用小部件。
到目前为止我有这个:
import pandas as pd
from IPython.display import display, HTML
from ipywidgets import widgets
df = pd.DataFrame([[1,'car'],[2,'bus'],[3,'train']])
click_list = []
display(df[:1])
button = widgets.Button(description='click')
display(button)
def obc(b):
click_list.append((pd.to_datetime('now'),1))
button.on_click(obc)
button2 = widgets.Button(description='click')
display(button2)
def obc2(b):
click_list.append((pd.to_datetime('now'),2))
display(df[1:2])
button2.on_click(obc2)
button3 = widgets.Button(description='click')
display(button3)
def obc3(b):
click_list.append((pd.to_datetime('now'),3))
display(df[2:3])
button3.on_click(obc3)
给出这个:
它具有我所追求的基本功能,但显示方式令人困惑(尤其是当我们谈论数十行时)我想要这样的东西:
或类似的,任何帮助将不胜感激
似乎 VBoxing html 显示效果不错(注意 IPython.display.HTML 和 ipywidgets.HTML 不一样)
import pandas as pd
from IPython.display import display, HTML
from ipywidgets import Button, HBox, VBox,widgets
import ipywidgets
df = pd.DataFrame([[1,'car'],[2,'bus'],[3,'train']])
click_list = []
button = widgets.Button(description='click')
def obc(b):
click_list.append((pd.to_datetime('now'),1))
button.on_click(obc)
button2 = widgets.Button(description='click')
def obc2(b):
click_list.append((pd.to_datetime('now'),2))
button2.on_click(obc2)
button3 = widgets.Button(description='click')
def obc3(b):
click_list.append((pd.to_datetime('now'),3))
button3.on_click(obc3)
display(HBox([VBox([widgets.Button(description=''),button,button2,button3]),ipywidgets.
HTML(df.style.set_table_attributes('class="table"').render())]))
有什么办法可以自动完成吗?所以它可以与未知数量的 checkboxes/rows 一起使用?下面的代码给出了一个错误:AttributeError: 'list' object has no attribute '_handle_displayed'
import pandas as pd
from IPython.display import display, HTML
from ipywidgets import Checkbox, HBox, VBox,widgets
import ipywidgets
df = pd.DataFrame(data=[['a',1],['b',32]], columns=['J1','J2'])
mydict = {}
t=0
for ts in df.J1:
mydict[str('c')+ str(t)] = widgets.Checkbox(value=False, description = 'Accepted')
t=t+1
display(HBox([VBox([widgets.Checkbox(description=''),mydict.values()]),ipywidgets.
HTML(df.style.set_table_attributes('class="table"').render())]))