Pandas数据帧值不会在函数外部发生变化

时间:2017-11-03 23:52:17

标签: pandas dataframe

我在for循环中有一个pandas数据框,我在pandas dataframe中更改了一个值,如下所示:

df[item].ix[(e1,e2)] = 1

但是当我访问df时,值仍然保持不变。你知道我哪里错了吗?

有什么建议吗?

1 个答案:

答案 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时,通常可以而且应该避免循环并利用基于集合的操作。这需要一些时间来习惯,但这是解锁图书馆全部功能的方法。