我在for循环中有一个pandas数据框,我在pandas dataframe中更改了一个值,如下所示:
df[item].ix[(e1,e2)] = 1
但是当我访问df时,值仍然保持不变。你知道我哪里错了吗?
有什么建议吗?
答案 0 :(得分:0)
您正在使用链式索引,这通常会导致问题。在您的代码中,df[item]
会返回一个系列,然后.ix[(e1,e2)] = 1
修改该系列,保持原始数据框不变。您需要修改原始数据框,如下所示:
import pandas as pd
df = pd.DataFrame({'colA': [5, 6, 1, 2, 3],
'colB': ['a', 'b', 'c', 'd', 'e']})
print df
df.ix[[1, 2], 'colA'] = 111
print df
该代码将colA的第1行和第2行设置为111,我相信这是你想要做的事情。当然,1和2可以用变量替换。
colA colB
0 5 a
1 6 b
2 1 c
3 2 d
4 3 e
colA colB
0 5 a
1 111 b
2 111 c
3 2 d
4 3 e
有关链式索引的详细信息,请参阅文档: https://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
旁注:您可能还想重新考虑代码,因为您提到在循环中修改数据框。使用pandas时,通常可以而且应该避免循环并利用基于集合的操作。这需要一些时间来习惯,但这是解锁图书馆全部功能的方法。