【问题标题】:Plotting (and saving) specific cells from multiple dataframe in Pandas从 Pandas 中的多个数据框中绘制(和保存)特定单元格
【发布时间】:2016-09-06 12:26:21
【问题描述】:

例如,如果我有 3 个这样的数据框:

In [1]: df1 = pd.DataFrame({'A': ['32', '36', '40', '33'],
   ...:                     'B': ['32', '34', '39', '35'],
   ...:                     'C': ['34', '32', '35', '36'],
   ...:                     'D': ['35', '39', '42', '40']},
   ...:                     index=[0, 1, 2, 3])
   ...: 

In [2]: df2 = pd.DataFrame({'A': ['33', '36', '37', '40'],
   ...:                     'B': ['42', '43', '46', '39'],
   ...:                     'C': ['34', '36', '38', '40'],
   ...:                     'D': ['32', '35', '34', '37']},
   ...:                      index=[0, 1, 2, 3])
   ...: 

In [3]: df3 = pd.DataFrame({'A': ['38', '39', '40', '41'],
   ...:                     'B': ['38', '37', '41', '40'],
   ...:                     'C': ['36', '39', '42', '41'],
   ...:                     'D': ['34', '39', '37', '39']},
   ...:                     index=[0, 1, 2, 3])

如果我想从这 3 个数据框中绘制特定的单元格怎么办?例如,我想在这些数据框中的第一行和第一列中绘制单元格,以查看趋势。 使用 iloc 逐个访问它似乎很蹩脚,尤其是使用更多数据帧(实际上我有 33 个从 csv 导入的数据帧,每个数据帧有 600 列和 400 行) 有没有比 iloc 更简单的方法?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    选项 1

    您的问题最通用的解决方案是将您的数据框包装到 pandas.Panel

    pnl = pd.Panel({'df1': df1, 'df2': df2, 'df3': df3})[['df1', 'df2', 'df3']]
    

    然后你就可以访问想要的系列了

    pnl.iloc[:, 0, 0]
    
    df1    32
    df2    33
    df3    38
    Name: A, dtype: object
    

    选项 2

    您也可以将数据帧放入另一个数据帧

    df = pd.concat([d.stack() for d in [df1, df2, df3]],
                   axis=1, keys=['df1', 'df2', 'df3'])
    

    然后用

    访问具体数据
    df.iloc[0, :]
    
    df1    32
    df2    33
    df3    38
    Name: (0, A), dtype: object
    

    或者

    df.to_panel().iloc[:, 0, 0]
    
    df1    32
    df2    33
    df3    38
    Name: A, dtype: object
    

    选项 3

    您可以抓住这 3 件物品并将其包裹在 panda.Series

    pd.Series([d.iloc[0, 0] for d in [df1, df2, df3]])
    
    0    32
    1    33
    2    38
    dtype: object
    

    【讨论】:

    • 这里肯定是小组情况,应该首选选项 1。 +1 给小组赞助商
    【解决方案2】:

    您可以通过编写一些脚本或将所有较小的数据帧组合成一个大数据帧来做到这一点

    脚本:

    1. 把你所有的df放在一个列表中df_list = [df1, df2, df3]
    2. 解析列表,收集列表中的所有值,然后绘制它。

      def plot_xy_cell(x, y, df_list):
          vals = [i.iloc(x, y) for i in df_list]
          ##plot the vals
      

    大数据框:

    1. 在每个数据帧中创建一个额外的索引。
    2. 将所有 dfs 合并为一个。
    3. 使用 groupby 子句绘制所需的列

    【讨论】:

      猜你喜欢
      • 2021-10-27
      • 2019-07-19
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 2014-06-03
      • 2020-01-28
      • 2016-08-24
      • 1970-01-01
      相关资源
      最近更新 更多