例如,如果我有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更容易做到的事情?
答案 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)
您可以通过执行一些脚本编写或将一个大型数据帧组合成所有较小的数据帧来实现此目的
脚本:
df_list = [df1, df2, df3]
解析列表,收集列表中的所有值,然后绘制它。
def plot_xy_cell(x, y, df_list):
vals = [i.iloc(x, y) for i in df_list]
##plot the vals
大数据框: