python - 如何从带有列表的 pandas DataFrame 创建一个绘图线图
问题描述
我有一个从 dict 创建的 pandas DataFrame,并想从中创建一个情节线图。然而,DataFrame 包含列表,如下所示:
a ... L
0 a_0 ... [L_00, L_01]
1 a_1 ... [L_10, L_11]
2 a_2 ... [L_20, L_21]
3 a_3 ... [L_30, L_31]
我的情节应该是L_i0
plotted against的值,a_i
但我只能创建给出这样的列名称的情节:
fig = px.line(dataframe, x='a', y='L')
我知道我可以访问这样的值['L'][i][0]
,然后遍历 i 但是否可以告诉 plotly 只取列表 L 的第一个值?
示例数据框
df = pd.DataFrame({'a':[1,2,3],
'L':[[10,11,12], [20,21,22], [30,31,21]]})
解决方案
我不明白为什么,但如果事实上你是正确的
[...] 只能创建给出这样的列名称的图
那么你真的应该考虑确保它df['L']
实际上只包含你想要绘制的值,而不是与一堆其他东西一起列出。但是您很可能有充分的理由完全按照您的方式组织数据,所以我怀疑您的问题实际上是XY 问题。
但是,如果您不一定要使用plotly.express
,那么plotly.graph_objects
可以完全按照您在此处使用的目标来做,除其他外, df.iterrows()
. 我假设这个数据结构类似于你的真实世界场景:
a L
0 1 [10, 11, 12]
1 2 [20, 21, 22]
2 3 [30, 31, 21]
代码:
import pandas as pd
import plotly.graph_objects as go
df = pd.DataFrame({'a':[1,2,3],
'L':[[10,11,12], [20,21,22], [30,31,21]]})
aVals = []
LVals = []
for i, row in df.iterrows():
aVals.append(row[0])
LVals.append(row[1][0])
fig = go.Figure(go.Scatter(x=aVals, y=LVals))
fig.show()
阴谋:
推荐阅读
- python - 具有默认值的python字典.get()方法即使不应该执行也会引发异常
- java - 从字符串转换为日期后对数据列表进行排序
- vue.js - 为什么加载组件后 beforeRouteEnter 中的 next 函数会发生?
- regex - 如何确定xslt中的值格式为dd-mmm-yyyy
- reactjs - 如果我在代码中遇到解析错误,如何识别错误在哪里
- sql - 如何在分层组织中创建具有所有依赖项的查询?
- sql - 在一条记录sql中重新组合两条记录
- javascript - 带有 DBRef 数组的 MongoDb addToSet
- acumatica - 无法使用 Rest API 为订单创建付款
- elasticsearch - 查询以匹配弹性搜索中的子字符串