2013-05-12 97 views
6

我已经构建了一个在每个单元格中存储简单字典的熊猫数据框。例如:python,在数据框中存储字典

{'Sales':0,'Revenue':0} 

我可以从数据帧通过检索特定的值:

df[columnA][index100]['Revenue'] 

但现在我想从columnA字典绘制所有收入值的图表 - 什么是实现这一目标的最佳方式?

将寿命从长远来看更容易,如果我放弃了字典,而是用两个相同大小的dataframes? (对于熊猫来说,这是非常新奇的,所以不确定最佳做法)。

+0

更新:在我与继续功能完美分级指数去年底 - 感谢帮助。 – Sylvansight 2013-12-03 16:46:04

回答

7

一个简单的方法来从列A是df[columnA].map(lambda v: v['Revenue'])得到所有的收入值。

取决于你在做什么,生命可能确实,如果你调整你的结构有点容易。例如,您可以使用具有“销售额”和“收入”的分层索引作为一个关键级别。

+0

谢谢 - 这对我有很大的帮助 – Sylvansight 2013-05-12 18:32:30

3

对于大多数的使用情况,你这不是一个好主意,存储数据帧字典。
值得一提的另一个数据结构是Panel

假设你有什么字典的数据框(有相当一致的键):(!注意有更直接的/最好的方式来构建这个)

In [11]: df = pd.DataFrame([[{'a': 1, 'b': 2}, {'a': 3, 'b': 4}], [{'a': 5, 'b': 6}, {'a': 7, 'b': 8}]], columns=list('AB')) 

In [12]: df 
Out[12]: 
        A     B 
0 {'a': 1, 'b': 2} {'a': 3, 'b': 4} 
1 {'a': 5, 'b': 6} {'a': 7, 'b': 8} 

您可以创建一个面板:

In [13]: wp = pd.Panel({'A': df['A'].apply(pd.Series), 'B': df['B'].apply(pd.Series)}) 

In [14]: wp 
Out[14]: 
<class 'pandas.core.panel.Panel'> 
Dimensions: 2 (items) x 2 (major_axis) x 2 (minor_axis) 
Items axis: A to B 
Major_axis axis: 0 to 1 
Minor_axis axis: a to b 

节其可以以多种方式来有效地访问作为DataFrames,例如:

In [15]: wp.A 
Out[15]: 
    a b 
0 1 2 
1 5 6 

In [16]: wp.minor_xs('a') 
Out[16]: 
    A B 
0 1 3 
1 5 7 

In [17]: wp.major_xs(0) 
Out[17]: 
    A B 
a 1 3 
b 2 4 

所以,你可以做所有的数据帧大熊猫whizziness:

In [18]: wp.A.plot() # easy! 
Out[18]: <matplotlib.axes.AxesSubplot at 0x1048342d0> 

也有("experimental") higher dimensional Panels

+0

我很想看看N-D实验的结果。我们有我们自己的用于数据处理的n-dim对象,具有不同类型的轴,而且我经常在平面数据框和超立方体之间移动。 – DSM 2013-05-12 21:20:24

+0

谢谢 - 我会与前面提到的提及@BrenBarn – Sylvansight 2013-05-12 21:26:36

+0

这个问题,以及分级指数实验@Sylvansight或许值得分层索引数据框,你可以通过to_panel方法:) – 2013-05-13 09:05:37