例如,如果我有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一次访问它似乎很la脚,尤其是在具有更多数据帧的情况下(实际上,我有33个从csv导入的数据帧,分别具有600列和400行)
有什么方法比iloc容易吗?
最佳答案
选项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