2

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

简单地说,我有一个包含 2 列的 DataFrame (df):“分类”和“A”,两者都填充了数据。df 是唯一索引的。如果“分类”不在某个列表中,我想覆盖 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 在处理混合位置和基于标签的层次索引时特别有用。

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

如果这是熊猫错误或者我在熊猫 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。正在检查的列和正在更改的列之间的任何列似乎都会触发更改的行为

4

1 回答 1

1

这看起来像是 0.11 中的一个错误,从好的方面来说,它似乎在 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
于 2013-06-10T16:17:51.320 回答