从Pandas中的多个数据帧中绘制(并保存)特定单元格

时间:2016-09-06 03:13:30

标签: python pandas dataframe

例如,如果我有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更容易做到的事情?

2 个答案:

答案 0 :(得分:2)

选项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 :(得分:0)

您可以通过执行一些脚本编写或将一个大型数据帧组合成所有较小的数据帧来实现此目的

脚本:

  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
    
  3. 大数据框:

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