在给定索引值的情况下,Pandas DataFrame替换1列中的值

时间:2017-06-03 00:16:54

标签: python pandas dataframe

这看起来很简单。但是我尝试了几种不同的东西,并且可能阅读了十几个似乎相关的StackOverflow问题。

我有加密的市场数据(比特币和其他)。订单簿是给定货币的所有“要价”和“出价”的列表。我想将数据存储在Pandas DataFrame中。 (我并没有坚持使用DF,只是认为它可以提供更容易的策划。)

所以现在的设置是一个DataFrame,其中Rate(price)是Index,它是一个浮点数。该价格可用的硬币数量位于名为Amt。

的列中

当我以给定的速率更新金额时,我想简单地替换该值。在所有可能的解决方案中,我发现这个选项对我来说是最直观的:

df.Amt[df.Rate == rate] = new_amt

虽然我没有从中得到任何错误,但当我检查Amt是否发生变化时,我发现它没有。我认为这是复制/切片问题之一,而不是处理DataFrame本身。

示例:

df.head()
Out[77]: 
       Rate        Amt
0  0.018021   0.319033
1  0.018009  29.994000
2  0.017999  28.121000
3  0.018042   2.233781
4  0.018055  13.433394

df.Amt[df.Rate == 0.018021] = 20

df.head()
Out[79]: 
       Rate        Amt
0  0.018021   0.319033
1  0.018009  29.994000
2  0.017999  28.121000
3  0.018042   2.233781
4  0.018055  13.433394

我错过了什么?我过去曾与DF合作改变整列,但通常只有1行。

1 个答案:

答案 0 :(得分:2)

纠正错误并纳入@ JohnE的评论

您正在使用pd.Series访问df.Amt对象,并使用[df.Rate == 0.018021]进行切片。当你想要的是将布尔数组传递给loc并指定那种方式。

df.loc[np.isclose(df.Rate, 0.018021), 'Amt'] = 20

       Rate        Amt
0  0.018021  20.000000
1  0.018009  29.994000
2  0.017999  28.121000
3  0.018042   2.233781
4  0.018055  13.433394