pydeck r.show() outputs TypeError: vars() argument must have __dict__ attribute
pydeck r.show() outputs TypeError: vars() argument must have __dict__ attribute
到目前为止,一切正常。我创建了一个新文件来创建新的热图。我的数据框是这样的:
time name lng lat
2019-10-16 08:00:00 A 23.1113 34.123123
2019-10-16 09:00:00 B 12.1113 11.123123
2019-10-16 07:30:00 C 134.1113 12.123123
2019-10-16 08:40:00 D 122.1113 12.123123
2019-10-16 08:50:00 A 16.1113 12.123123
这与我之前在创建热图确切名称和其他列时使用的数据框完全相同。
复制粘贴之前用于创建热图的代码:
layer = pdk.Layer(
"HeatmapLayer",
df,
get_position="[lng, lat]"
)
center = [126.986, 37.565]
view_state = pdk.ViewState(
longitude=center[0],
latitude=center[1],
zoom=10
)
r = pdk.Deck(layers=[layer],
initial_view_state=view_state,
mapbox_key=MAPBOX_API_KEY)
r.show()
当我 运行 w/o r.show() 它不显示任何东西,当我 运行 和 r.show() 它输出 TypeError: vars() argument must have __dict__ attribute
我不知道哪里出了问题...
它发生在我身上,解决方案只传递给 pydeck 所需的列。
在你的情况下 df[["lng", "lat"]]
这可能是与 pandas 数据框任何列中的任何 N/A 值相关联的问题,但我不确定。
您可以使用 r.to_html()
而不是 r.show()
来解决它
我遇到了同样的问题,我怀疑 pydeck
对您的一个 df 专栏不满意,可能 time
。您是否使用 numpy 创建此列中的数据?在我的例子中,一个简单的 np 函数:
color = np.random.choice(range(256), size=3)
提出了同样的问题。我解决的方法是加上.tolist()
,这样就会转换成正常的list/array。之后,将它传递给 pydeck 作为 color
prop.
效果很好
我的建议是回到创建此专栏的位置,并尝试为 pydeck“简化”它。 Ghirardi 的回答也是正确的,但会强制您删除可能在渲染过程中以某种方式使用的数据(即颜色 time
等)
这个问题有点老了。但是对于那些可能在使用较新版本的 pydeck 时遇到这个问题的人来说,在我的例子中,这是因为参数:
latitude=center_lat, longitude=center_lng
的 pdk.ViewState
函数不是浮点数而是 np.float32
变量。 float(center_lat)
之类的简单转换有效。
我正在发送 np 数组
grouped_df.apply(lambda x: list(x[[LON, LAT]].values))
哪些干扰了 json 转换。它们需要是列表:
grouped_df.apply(lambda x: list(x[[LON, LAT]].values.tolist()))
我在尝试绘制 H3HexagonLayer 时遇到了类似的问题。由于 none 所提供的解决方案对我有用,所以它遵循解决我的问题的方法。
我刚刚将原始数据框 df 替换为:
df = pd.read_json(df.to_json())
一个好处是我不需要将列限制为明确使用的列。此外,deck.show() 和 deck.to_html() 也工作正常。
到目前为止,一切正常。我创建了一个新文件来创建新的热图。我的数据框是这样的:
time name lng lat
2019-10-16 08:00:00 A 23.1113 34.123123
2019-10-16 09:00:00 B 12.1113 11.123123
2019-10-16 07:30:00 C 134.1113 12.123123
2019-10-16 08:40:00 D 122.1113 12.123123
2019-10-16 08:50:00 A 16.1113 12.123123
这与我之前在创建热图确切名称和其他列时使用的数据框完全相同。
复制粘贴之前用于创建热图的代码:
layer = pdk.Layer(
"HeatmapLayer",
df,
get_position="[lng, lat]"
)
center = [126.986, 37.565]
view_state = pdk.ViewState(
longitude=center[0],
latitude=center[1],
zoom=10
)
r = pdk.Deck(layers=[layer],
initial_view_state=view_state,
mapbox_key=MAPBOX_API_KEY)
r.show()
当我 运行 w/o r.show() 它不显示任何东西,当我 运行 和 r.show() 它输出 TypeError: vars() argument must have __dict__ attribute
我不知道哪里出了问题...
它发生在我身上,解决方案只传递给 pydeck 所需的列。 在你的情况下 df[["lng", "lat"]] 这可能是与 pandas 数据框任何列中的任何 N/A 值相关联的问题,但我不确定。
您可以使用 r.to_html()
而不是 r.show()
我遇到了同样的问题,我怀疑 pydeck
对您的一个 df 专栏不满意,可能 time
。您是否使用 numpy 创建此列中的数据?在我的例子中,一个简单的 np 函数:
color = np.random.choice(range(256), size=3)
提出了同样的问题。我解决的方法是加上.tolist()
,这样就会转换成正常的list/array。之后,将它传递给 pydeck 作为 color
prop.
我的建议是回到创建此专栏的位置,并尝试为 pydeck“简化”它。 Ghirardi 的回答也是正确的,但会强制您删除可能在渲染过程中以某种方式使用的数据(即颜色 time
等)
这个问题有点老了。但是对于那些可能在使用较新版本的 pydeck 时遇到这个问题的人来说,在我的例子中,这是因为参数:
latitude=center_lat, longitude=center_lng
的 pdk.ViewState
函数不是浮点数而是 np.float32
变量。 float(center_lat)
之类的简单转换有效。
我正在发送 np 数组
grouped_df.apply(lambda x: list(x[[LON, LAT]].values))
哪些干扰了 json 转换。它们需要是列表:
grouped_df.apply(lambda x: list(x[[LON, LAT]].values.tolist()))
我在尝试绘制 H3HexagonLayer 时遇到了类似的问题。由于 none 所提供的解决方案对我有用,所以它遵循解决我的问题的方法。
我刚刚将原始数据框 df 替换为:
df = pd.read_json(df.to_json())
一个好处是我不需要将列限制为明确使用的列。此外,deck.show() 和 deck.to_html() 也工作正常。