熊猫:添加新行到多索引表不起作用

时间:2015-03-27 15:47:57

标签: python pandas multi-index

我有一个奇怪的问题:我试图在我的表中添加一个多行的新行。但是,尽管我在这里完全解决了这个问题:adding a row to a MultiIndex DataFrame/Series。他们的示例和解决方案有效,但它不适用于我的数据。我做错了什么,或者有错误

import pandas as pd
import datetime as dt

他们的代码(工作):

df = pd.DataFrame({'Time': [dt.datetime(2013,2,3,9,0,1), dt.datetime(2013,2,3,9,0,1)], 
                   'hsec': [1,25], 'vals': [45,46]})
df.set_index(['Time','hsec'],inplace=True)

print df
df.ix[(dt.datetime(2013,2,3,9,0,2),0),:] = 5
print df

输出:

                          vals
Time                hsec      
2013-02-03 09:00:01 1       45
                    25      46

                          vals
Time                hsec      
2013-02-03 09:00:01 1       45
                    25      46
2013-02-03 09:00:02 0        5

我的代码(不工作):

d = [[0, 0, 2], [0, 2, 2], [1, 0, 2], [1, 2, 2]]
df = pd.DataFrame(d, columns=('frames', 'classID', 'amount'))
df.set_index(['frames', 'classID'], inplace=True)
print df

df.ix[(1,1),:] = 5
print df

输出:

                amount
frames classID        
0      0             2
       2             2
1      0             2
       2             2

                amount
frames classID        
0      0             2
       2             5
1      0             2
       2             2

请注意,5出现在df.loc[(0,2)]

1 个答案:

答案 0 :(得分:4)

对我来说这似乎是熊猫中的一个错误,但它在新发布的0.16中得到了明显的修复:

In [9]: pd.__version__
Out[9]: '0.16.0'

In [10]: df.ix[(1,1),:] = 5

In [11]: df
Out[11]:
                amount
frames classID
0      0             2
       2             2
1      0             2
       2             2
       1             5

但我可以证实这确实不适用于熊猫0.15.2。如果可以升级到pandas 0.16,我也建议在这种情况下明确使用loc(因此它肯定不会回退到位置整数位置)。但请注意,该错误也位于pandas 0.16以下的loc