我已经构建了一个 pandas 数据框,它在每个单元格中存储了一个简单的字典。例如:
{'Sales':0,'Revenue':0}
我可以通过以下方式从数据框中检索特定值:
df[columnA][index100]['Revenue']
但是现在我想绘制字典中所有收入值的图表columnA
- 实现这一目标的最佳方法是什么?
如果我放弃字典并使用两个相同大小的数据框,从长远来看,生活会更轻松吗?(我对熊猫很陌生,所以不确定最佳实践)。
我已经构建了一个 pandas 数据框,它在每个单元格中存储了一个简单的字典。例如:
{'Sales':0,'Revenue':0}
我可以通过以下方式从数据框中检索特定值:
df[columnA][index100]['Revenue']
但是现在我想绘制字典中所有收入值的图表columnA
- 实现这一目标的最佳方法是什么?
如果我放弃字典并使用两个相同大小的数据框,从长远来看,生活会更轻松吗?(我对熊猫很陌生,所以不确定最佳实践)。
从 A 列获取所有收入值的简单方法是df[columnA].map(lambda v: v['Revenue'])
.
取决于你在做什么,如果你稍微调整一下你的结构,生活可能确实会更轻松。例如,您可以使用以“Sales”和“Revenue”作为一级键的分层索引。
对于大多数用例,将字典存储在 DataFrame 中并不是一个好主意。
另一个值得一提的数据结构是Panel。
假设您有一些字典的 DataFrame(具有相当一致的键):
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
可以通过多种方式作为 DataFrame 有效访问其中的部分,例如:
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
所以你可以做所有的 pandas DataFrame whizziness:
In [18]: wp.A.plot() # easy!
Out[18]: <matplotlib.axes.AxesSubplot at 0x1048342d0>