使用ipysheet操作表格时如何为新增行填充数据(基于DataFrame)
解决方案
核心逻辑:ipysheet 行号从0开始计数,每次执行sheet.rows +=1新增行后,新行的索引为sheet.rows -1,直接调用ipysheet.cell()方法给对应位置的单元格赋值即可。如果需要和你维护的DataFrame联动,同步更新DataFrame数据即可。
修正后可直接运行的代码
import qgrid,ipysheet from ipywidgets import widgets import numpy as np import pandas as pd random_data = [['ABC','DEF','GHI'], [0.69494459,0.90502388,0.13374771], [0.89609645,0.66166011,0.12123602], [0.51229257,0.57240808,0.25482961], [0.25478973,0.08438657,0.76977642]] df = pd.DataFrame(random_data, columns=["Col1", "Col2", "Col3"]) sheet = ipysheet.from_dataframe(df) # 修正原代码笔误:原代码调用的wg没有导入,替换为已导入的widgets btn = widgets.Button(description = 'Add Row') def on_bttn_clicked(b): global df # 获取新行的索引 new_row_index = sheet.rows # 新增行 sheet.rows += 1 # 给新行的3列分别赋值,value可替换为你的业务数据 ipysheet.cell(new_row_index, 0, value=np.random.rand()) ipysheet.cell(new_row_index, 1, value=np.random.rand()) ipysheet.cell(new_row_index, 2, value=np.random.rand()) # 同步更新本地维护的DataFrame df.loc[len(df)] = [ sheet[new_row_index,0].value, sheet[new_row_index,1].value, sheet[new_row_index,2].value ] btn.on_click(on_bttn_clicked) display(btn,sheet)
DataFrame优先的同步方案(可选)
如果你所有数据操作都基于DataFrame完成,也可以先更新DataFrame,再直接同步到sheet对象,无需手动操作单元格:
def on_bttn_clicked(b): global df, sheet # 构造新行数据,可自定义 new_row = pd.Series([np.random.rand(), np.random.rand(), np.random.rand()], index=df.columns) # 追加到原DataFrame df = pd.concat([df, new_row.to_frame().T], ignore_index=True) # 同步更新sheet sheet.data = ipysheet.from_dataframe(df).data
内容的提问来源于stack exchange,提问作者Srinivas
相关产品推荐
相关产品推荐

