大熊猫0.10.1至0.11.0 .ix方法

时间:2013-06-10 09:32:17

标签: python pandas

我有一个具有唯一索引的庞大数据框。这是pandas 0.10.1中的工作代码,但似乎在pandas 0.11.0中断。

简单地说,我有一个包含2列的DataFrame(df):“分类”和“A”,两者都填充了数据.df是唯一索引的。如果'分类不在a中,我想覆盖A中的值某些清单。

# df contains the original data
accurate_list = ['corr1', 'corr2', 'corr3']
# x is filtered dataframe with only inaccurate entries
x = df[~df.Classification.isin(accurate_list)]
df.ix[x.index,'A'] = df['Classification']

很抱歉无法弄清楚如何在这里获取一些示例数据。问题似乎是在.ix方法的最后一行。引自pandas 0.11.0的新文档是http://pandas.pydata.org/pandas-docs/dev/whatsnew.html#v0-11-0-april-22-2013

  

“。ix支持混合整数和基于标签的访问。它主要基于标签,但将回退到整数位置访问。.ix是最通用的,并且将支持.loc和.iloc的任何输入,以及作为浮点标签方案的支持。.ix在处理混合的基于位置和标签的层次索引时特别有用。“

没有异常消息......但似乎数据失去了对齐。

任何想法,如果这是一个熊猫bug或我在pandas 0.10.1中写错了代码?

以下是一些示例代码。这说明了问题:

accurate_ICB = ['SA EQUITY CFD', 'SA EQUITY', 'SA SSF']
print pd.__version__
data = {'Classification': ['SA EQUITY CFD', 'bbb', 'SA EQUITY', 'SA SSF', 'aaa'],
    'Random': [1,2,3,4,5],
    'X': ['correct', 'wrong','correct', 'correct','wrong']}
df =pd.DataFrame(data)
print "Original DataFrame:"
print df
print "="*35
x = df[~df.Classification.isin(accurate_ICB)]
print x
print "="*35
df.ix[x.index,'X'] = df['Classification']
print df

在pandas 0.10.1中它产生:

  Classification  Random        X
0  SA EQUITY CFD       1  correct
1            bbb       2      bbb
2      SA EQUITY       3  correct
3         SA SSF       4  correct
4            aaa       5      aaa
在pandas 0.11.0中,右下角aaa变成了bbb。正在检查的列和正在更改的列之间的任何列似乎触发更改的行为

1 个答案:

答案 0 :(得分:1)

这看起来像0.11中的bug,好的一面看起来固定在0.11.1(很快就会出来)。

0.11.1.dev-bbcafd8
Original DataFrame:
  Classification  Random        X
0  SA EQUITY CFD       1  correct
1            bbb       2    wrong
2      SA EQUITY       3  correct
3         SA SSF       4  correct
4            aaa       5    wrong
===================================
  Classification  Random      X
1            bbb       2  wrong
4            aaa       5  wrong
===================================
  Classification  Random        X
0  SA EQUITY CFD       1  correct
1            bbb       2      bbb
2      SA EQUITY       3  correct
3         SA SSF       4  correct
4            aaa       5      aaa