我有一个具有唯一索引的庞大数据框。这是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。正在检查的列和正在更改的列之间的任何列似乎触发更改的行为
答案 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