在pandas中附加数据

时间:2013-05-24 18:30:54

标签: python multithreading pandas

我无法弄清楚如何将数据添加到熊猫数据框中的列中。

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

例如:

我有一个仅包含标题的.csv文件:

p1,p2,p3,c

我希望线程为列添加值。因此,在第一个传感器上的第一个样本之后,数据帧将具有。

p1 p2  p3  c
3  NaN NaN NaN

然后下一个传感器应该添加一个像这样的值

p1 p2  p3  c
3  5   NaN NaN

我已经搜索了追加,但我无法弄清楚代码应该如何。

1 个答案:

答案 0 :(得分:1)

如果你有一些每个观察所独有的列(我们称之为“ObservationID”),那么这样做非常简单。您可以使用pandas.concatpandas.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_index=True进行连接:

sensors = pd.concat([sensor1, sensor2], axis=1, ignore_index=True)

最后,您也可以使用pd.merge执行此操作,但我真的不明白您需要的原因(除非您在两个部分都有相同名称的列,否则您需要使用合并或选择其中一个传感器来获胜)。要做到这一点,你需要一个连接条件(这就是我们为此使用未编制索引的传感器的原因):

sensors = pd.merge(sensor1, sensor2, how="inner", on=["ObservationID"]) 

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