Python 在熊猫中添加数据

Python 在熊猫中添加数据,python,multithreading,pandas,Python,Multithreading,Pandas,我不知道如何将数据添加到panda数据框中的列中 我有四个传感器,在四个线程中采样。我希望每个传感器将当前值附加到熊猫数据帧中的特定列 例如: 我有一个只有标题的.csv文件: p1,p2,p3,c 我希望线程向列添加一个值。因此,在第一个传感器上进行第一次采样之后,数据帧将具有 p1 p2 p3 c 3 NaN NaN NaN 然后,下一个传感器应添加如下值 p1 p2 p3 c 3 5 NaN NaN 我搜索了追加,但我不知道代码应该是什么样子的。如果您有一些列对每个观

我不知道如何将数据添加到panda数据框中的列中

我有四个传感器,在四个线程中采样。我希望每个传感器将当前值附加到熊猫数据帧中的特定列

例如:

我有一个只有标题的.csv文件:

p1,p2,p3,c
我希望线程向列添加一个值。因此,在第一个传感器上进行第一次采样之后,数据帧将具有

p1 p2  p3  c
3  NaN NaN NaN
然后,下一个传感器应添加如下值

p1 p2  p3  c
3  5   NaN NaN

我搜索了追加,但我不知道代码应该是什么样子的。

如果您有一些列对每个观察都是唯一的(我们称之为“ObservationID”),那么执行此操作非常简单。您可以使用
pandas.concat
pandas.merge
。我将使用
concat
,因为我发现它稍微简单一些

import pandas as pd

sensor1 = pd.DataFrame({"p1":[5,2,3], "ObservationID":[22, 31, 14]})
sensor2 = pd.DataFrame({"p2":[1,1,0], "ObservationID":[22, 31, 14]})

# first, set index column to be unique
sensor1_indexed = sensor1.set_index(["ObservationID"])
sensor2_indexed = sensor2.set_index(["ObservationID"])

sensors = pd.concat([sensor1_indexed, sensor2_indexed], axis=1)
如果可以以相同的方式对它们进行排序,则可以添加
ignore\u index=True
来进行串联:

sensors = pd.concat([sensor1, sensor2], axis=1, ignore_index=True)
最后,您还可以使用
pd.merge
,但我不明白为什么需要这样做(除非两部分上的列名称相同,否则您需要使用merge或选择其中一个传感器才能获胜)。要做到这一点,您需要一个连接条件(这就是为什么我们使用未索引的传感器):


请注意,
pd.concat
获取对象列表,可以在一次调用中连接任意多个元素,如果您有多个传感器,这可能会更方便。

您有什么可以索引的吗?您需要确保所有内容的排序方式完全相同,或者每个观察都有一个唯一的列。我正在将列名p1/p2/p3或c传递给线程。我以为您正在尝试将4列合并为一列。我不确定您是否真的需要使用pandas在线程之间进行合并,为什么不使用类似SQLite的东西,或者只使用一个简单的numpy数组呢?您可以将调用分块(即,一次生成5个以上的值),根据观察结果跟踪您的位置,然后动态发送更新/插入命令以填充列。看起来那样会更有效率。对于numpy数组,可以传递列索引。
sensors = pd.merge(sensor1, sensor2, how="inner", on=["ObservationID"])