如何解决将嵌套字典转换为熊猫数据框并绘图
class Listener:
recorded = defaultdict(lambda: defaultdict(list))
def on_message_received(self,msg):
self.recorded[msg.id]["timestamp"].append(msg.timestamp)
self.recorded[msg.id]["data"].append(msg.data)
可以假设时间戳和数据都是浮点数。
对于单个 id,我可以使用 --
绘制数据import altair as alt
import pandas as pd
import streamlit as st
listener = Listener()
plt,frame = st.empty(),st.empty()
def plot():
c = listener.recorded.copy()
df = pd.DataFrame.from_dict(c[100]) # using id: 100 as an example
chart = alt.Chart(df).mark_line().encode(x="timestamp",y="data")
frame.write(df)
plt.altair_chart(chart)
产生一个数据框和图:
所以我的问题是,我将如何备份一个级别并从字典 listener.recorded
生成一个数据框/图,以便每个唯一的 id 都正确地绘制一个图例?我似乎无法独自到达那里...
解决方法
您可以使用 pd.concat
创建数据帧,重置索引,然后照常使用 Altair。下面是一个简短示例,其数据类似于您正在生成的字典:
import altair as alt
import pandas as pd
import numpy as np
rng = np.random.default_rng(1701)
data = {
100: {'timestamp': pd.date_range('2021-01-01',periods=10,freq='D'),'data': np.random.randint(0,100,10)},200: {'timestamp': pd.date_range('2021-01-01',300: {'timestamp': pd.date_range('2021-01-01',}
df = pd.concat({k: pd.DataFrame(d) for k,d in data.items()})
df = df.reset_index(0).rename({'level_0': 'id'},axis=1)
alt.Chart(df).mark_line().encode(
x='timestamp:T',y='data:Q',color='id:N',)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。