如何解决vaex dataframe加载到dash datatable的参数格式报错问题
报错原因
Dash DataTable的data参数要求接收数组格式的行数据集,每个数组元素为对应单行的列名-值字典。你调用vaex.DataFrame.to_dict()时默认返回的是{列名: 全列值数组}的列向字典对象,不符合入参要求,因此触发类型错误。
vaex不能直接和pandas DataFrame一样直接适配Dash DataTable的入参格式,需要做一层格式转换。
解决方案
方案1:小数据量转pandas处理(最简便)
如果你的数据集不大,直接将vaex DataFrame转成pandas DataFrame后导出符合要求的行记录即可,修正后代码如下:
import vaex import dash from dash import dash_table import pandas as pd df = vaex.open('./customer_list_100.csv.hdf5') app = dash.Dash(__name__) app.layout = dash_table.DataTable( id='table', columns=[{"name": i, "id": i} for i in df.columns], # 增加格式转换逻辑 data=df.to_pandas_df().to_dict('records'), ) if __name__ == '__main__': app.run_server(debug=True)
方案2:不转pandas直接构造目标格式
不想额外引入pandas转换开销的话,可以直接遍历vaex数据生成要求的结构,仅替换data参数行即可:
data=[dict(zip(df.columns, row)) for row in df.values]
注意事项
如果你的数据集量级很大,不要一次性把全量数据加载到DataTable中,建议结合Dash的后端分页能力,每次仅加载当前页对应的vaex切片数据,避免内存占用过高和前端渲染卡顿。
内容的提问来源于stack exchange,提问作者AVM
相关产品推荐
相关产品推荐

