这看起来很简单。但是我尝试了几种不同的东西,并且可能阅读了十几个似乎相关的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行。
答案 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