gpt4 book ai didi

python - Pandas 在数据帧中设置值,多线程 - loc 与 set_value

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:17 27 4
gpt4 key购买 nike

我看到在多线程环境中更新数据框时出现奇怪的行为。我正在逐个单元地更新,使用锁,因此只有一个进程同时访问数据帧。它是大型应用程序的一部分,但简而言之,这就是正在发生的事情,其中​​ df 是大型类(自身)中的数据框:

def update_data(self, idx):
self.update_cell(idx, 'a', 0.5*(self.df.at[idx,'b']+self.df.at[idx,'c']))
print self.df.at[idx,'a']
print self.df.loc[idx,'a']

def update_cell(self,idx,col,value):
self.lock.acquire()
# version 1: self.df.loc[idx,col] = value
# version 2: self.df.at[idx,col] = value
# version 3: self.df.set_value(idx,col,value)
self.lock.release()

现在 - 无论我使用什么版本,第一个 print 语句都有效并给出正确的值。但是第二个打印语句在除版本 1 之外的所有版本中都失败了(返回 pandas.np.nan)。看起来只有版本 1 真正更新了数据框。

想法?谢谢,

最佳答案

回答我自己的问题:使用 Pandas 0.17,我不再遇到这个问题,一切都按预期进行。我相信我在发布初始问题时使用的是 Pandas 0.14。 FWIW,.at 明显快于 .loc,因此它最终是一个显着的改进。

关于python - Pandas 在数据帧中设置值,多线程 - loc 与 set_value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30639062/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com