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

标签 python multithreading pandas

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

现在 - 无论我使用什么版本,第一个打印语句都会起作用并给出正确的值。但是除了版本 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/

相关文章:

python - 将两个具有相同形状和相同列名的 Pandas 数据框相乘

python - 将输入传递给 Popen 进程

c++ - 处理比我的处理速度快一倍的数据的方法

Python lambda 函数输出 function_main 消息而不是数字?

java - while 循环中的 Thread.sleep() 无法正常工作?

c - 带链表的多线程

python - 如何使用 pandas 有效地为序列中缺少的数据点添加行?

python - 根据 pandas 中的索引绘制一行中的所有值

在 main 中调用一次时,Python 线程运行两次

python - 从字符串中取出空格,并用 “+”替换它们