早上好。
我在Dahs-plotly中的函数内使用了for循环(我不知道这是否重要)。关键是自第二次迭代以来,我在处理熊猫数据帧时遇到了奇怪的循环行为。下面我显示一个示例:
list_items = ['item1', 'item2', 'item3']
for item in list_items:
info = df_base[df_base.item == item].copy()
More similar code...
在第一次迭代中没有问题,我得到了item = 'item1'
,但是在第二次迭代中,由于迭代器失败,代码在More similar code...
中失败了。
我正在使用pdb包进行调试,并将代码暂停在info = df_base[df_base.item == item].copy()
上方。令我惊讶的是,在暂停编译的情况下,有时item = 'item1'
,有时是item = 'item2'
,而正确的行为是item = 'item2'
。
这是我第一次遇到这样的错误并且感到惊讶,因此在网上寻找解决方案时,我发现了迭代器(其中每次迭代都消除了迭代器的值),所以我的代码是:
list_items = iter(['item1', 'item2', 'item3'])
done_loop = False
while not done_loop:
try:
item = next(list_items)
except StopIteration:
done_loop = True
else:
info = df_base[df_base.item == item].copy()
More similar code...
但是错误仍然相同。
希望你能帮助我。
非常感谢您。
编辑
我已删除info = df_base[df_base.item == item].copy()
下的所有代码,所以我的代码是:
list_items = iter(['item1', 'item2', 'item3'])
done_loop = False
while not done_loop:
try:
item = next(list_items)
except StopIteration:
done_loop = True
else:
info = df_base[df_base.item == item].copy()
print iter
print info
在提示符下,我仍然遇到相同的错误:iter1
; (right info 1)
; iter2
; iter1
; (right info 2)
; iter3
; (wrong info 1)
;等等...
编辑2
import pandas as pd
data = {1.0: [0,1,2,3,4], 2.0: [54,12,32,45,78], 'table': ['t1','t1', 't2','t3','t4']}
info_base = pd.DataFrame(data = data)
list_tables = iter(info_base.table.unique().tolist())
done_looping = False
while not done_looping:
try:
table = next(list_tables)
except StopIteration:
done_looping = True
else:
info = info_base[info_base.table == table].copy()
print table
print info
答案 0 :(得分:0)
我没有足够的声誉来评论您的问题,但是您是否正在使用for循环动态创建回调?
如果是,我也遇到了相同的问题,并通过回调中的State获得了组件的ID,从而解决了该问题
例如:
for component_id, component_property in dash_layout_components.items():
@app.callback(
Output(component_id, component_property),
[Input(key, value) for key, value in set_back_and_display_graph_input.items()],
[State(component_id, 'id')]
我必须在函数内部获取迭代器值,但是我面临的问题与您相同,因此我添加了component_id作为State以便能够将其包含在函数中