2017-05-07 60 views
2

基本上我想要做的是使熊貓數據框可點擊並保存點擊用戶。使用jupyter小部件來保存點擊熊貓數據框

有關使用小部件的想法。

到目前爲止,我有這樣的:

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) 

開出了這一點:

enter image description here

它具有的基本功能我之後,卻​​顯示在一個混亂的方式(特別是如果我們正在談論幾十行)我想有這樣的事情:

enter image description here

或類似的,任何幫助將大大appriciated

+0

它應該看起來如何?而且你實際上並沒有實施任何「改變」'df'?我想創建一個包含數據框小部件的完全新小部件會更容易。 – MSeifert

+0

3行只是一個例子,所以按鈕應該在數據框的一側,組合對象的想法是偉大的,但如何? –

+0

這取決於你想如何看起來像。你可以創建一個「所需」小部件顯示的圖像(寫意也很好)? – MSeifert

回答

0

看來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())])) 

enter image description here

0

有沒有辦法自動執行此操作?所以它可以用於未知數量的複選框/行?下面的代碼給出了一個錯誤: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())]))