【问题标题】:How to create a plotly line plot from a pandas DataFrame with lists如何从带有列表的 pandas DataFrame 创建一个绘图线图
【发布时间】:2020-10-09 10:31:31
【问题描述】:

我有一个从 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 的值与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]]})

【问题讨论】:

    标签: python pandas dataframe plotly plotly-dash


    【解决方案1】:

    我不明白为什么,但如果事实上你是正确的

    [...] 只能创建给出这样的列名称的图

    那么你真的应该考虑确保df['L'] 实际上只包含你想要绘制的值,而不是与一堆其他东西一起列出。但是您很可能有充分的理由按照自己的方式组织数据,所以我怀疑您的问题实际上是XY problem。

    但是,如果您不一定要使用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()
    

    剧情:

    【讨论】:

      【解决方案2】:

      导入库

      import matplotlib.pyplot as plt
      import pandas as pd
      

      使用熊猫创建数据框

      data = [['DS', 'Linked_list', 10], ['DS', 'Stack', 9], ['DS', 'Queue', 7], 
              ['Algo', 'Greedy', 8], ['Algo', 'DP', 6], ['Algo', 'BackTrack', 5], ]  
      df = pd.DataFrame(data, columns = ['Category', 'Name', 'Marks'])  
      

      绘制数字列

      plt.plot(df["Marks"])
      plt.xlabel
      

      【讨论】:

        【解决方案3】:

        我读错了文档并找到了一种方法来做我想做的事:

        fig = px.line(dataframe, x='a',
                      y=[tupel[0] for tupel in dataframe['L']])
        

        这将访问列表中的第一个元素,这些元素是 L 中包含的元组。

        【讨论】:

          猜你喜欢
          • 2017-08-19
          • 2021-10-24
          • 2020-12-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-31
          • 2021-08-17
          • 2016-06-17
          相关资源
          最近更新 更多