4 python datatable pandas plotly-dash
我正在使用 Python3、Flask 和 Dash 开发一个项目。DataTable()我正在使用from可视化 CSV 表dash_table,并希望突出显示一些特定的单元格。
根据表格样式的文档,这可以通过使用style_data_conditionalDataTable 定义(参考)内部的属性来完成。
我的 CSV 表如下所示:
testclient, 0.40, 0.48, False, False, False, 0.14, True, True, 0.0, 2
raspberrypi, 0.20, 0.21, False, True, False, 0.18, True, False, 0.0, 3
Run Code Online (Sandbox Code Playgroud)
当尝试访问第一列时,所有样式更改都有效。
[...]
style_data_conditional=[
{
'if': {
'column_id': 'hostname',
'filter_query': '{hostname} eq "testclient"'
},
'color': 'green',
}
],
[...]
Run Code Online (Sandbox Code Playgroud)
但是,当尝试访问任何其他行列(如“ftp”或“http”)时,它将无法工作,即使我debug=True在函数调用中使用该参数app.run(...),也不会得到任何错误输出。
[...]
style_data_conditional=[
{
'if': {
'column_id': 'ftp',
'filter_query': '{ftp} eq "True"'
},
'color': 'green',
}
],
[...]
Run Code Online (Sandbox Code Playgroud)
DataTable...内部有一个“样式”属性的顺序。
- 样式数据条件
- 样式数据
- 样式过滤器条件
- 样式过滤器
- 样式标题条件
- 样式标题
- 样式单元格条件
- 样式单元格
...但正如您所看到的,给定的样式属性是列表中第一个提到的。
该表的定义如下:
content = dash_table.DataTable(
id='table',
columns=[{"name": i, "id": i} for i in df.columns],
[...]
Run Code Online (Sandbox Code Playgroud)
您是否有任何线索,为什么 DataTable 仅通过更改就表现得如此奇怪column_id?
由于您没有在 csv 示例中提供列标题,因此我只能假设ftp和http引用布尔列?
Dash DataTables 中对布尔类型列的支持似乎介于有限和不存在之间。filter_query表达式似乎不适用于布尔值。该文档甚至没有提到列的布尔数据类型:
列(字典;可选):
- type(等于:“any”、“numeric”、“text”、“datetime”;可选):列数据的数据类型。
str 我通过将所有布尔列的数据类型设置为我的数据框中来解决这个问题:
for col, dtype in df.dtypes.items():
if dtype == 'bool':
df[col] = df[col].astype('str')
Run Code Online (Sandbox Code Playgroud)
然后,条件样式按预期工作:
DataTable(
[...],
style_data_conditional=[
{
'if': {
'column_id': 'hostname',
'filter_query': '{hostname} eq "testclient"'
},
'backgroundColor': 'green',
},
{
'if': {
'column_id': 'ftp',
'filter_query': '{ftp} eq "True"'
},
'backgroundColor': 'green',
}
]
)
Run Code Online (Sandbox Code Playgroud)