熊猫面板:复制与视图

时间:2014-05-20 10:03:06

标签: python pandas

基本上,如果我想更改原始df 中的数据,我总是必须使用.loc[]。但请考虑以下

>>> import pandas as pd
>>> from scipy import random
>>> from numpy import arange

>>> T, N = 4, 5
>>> TIndex = arange(0, T)
>>> FIndex = arange(0, N)

>>> wp = pd.Panel(items=['A', 'w', 'l', 'a', 'x', 'X', 'd', 'profit'],
...               major_axis=TIndex, minor_axis=FIndex)
>>> wp.loc['a', 0, 0] = 0 
>>> df = wp.loc[0, 'a']
>>> df.loc[0, 'a'] = 'test'
>>> df.loc[0, 'a']
Out[379]: 'test'
>>> wp.loc['a', 0, 0]
Out[380]: 0

我做错了什么?

此外,没有抛出SettingWithCopyWarning。当我在数据帧级别上犯这些错误时,我通常会得到这些。这非常令人恼火。

1 个答案:

答案 0 :(得分:2)

我可以通过调用loc中的标签来修改DataFrame和原始Panel。文档说locstrictly limited to labels,所以我不确定你发布的代码是否可以工作:将示例粘贴到IPython控制台(?)时我得到KeyError: 'the label [0] is not in the [items]'

而不是

df = wp.loc[0, 'a']

DO

df = wp.loc['a']

然后使用iloc和整数索引进行修改:

In [3]: df
Out[3]:
    0   1   2   3   4
0   0 NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN

[4 rows x 5 columns]

In [4]: df.iloc[0, 0] = 'test'

In [5]: df
Out[5]:
      0    1    2    3    4
0  test  NaN  NaN  NaN  NaN
1   NaN  NaN  NaN  NaN  NaN
2   NaN  NaN  NaN  NaN  NaN
3   NaN  NaN  NaN  NaN  NaN

[4 rows x 5 columns]

In [6]: wp.loc['a']
Out[6]:
      0    1    2    3    4
0  test  NaN  NaN  NaN  NaN
1   NaN  NaN  NaN  NaN  NaN
2   NaN  NaN  NaN  NaN  NaN
3   NaN  NaN  NaN  NaN  NaN

[4 rows x 5 columns]