我有3个包含传感器数据的数据框。在进一步处理数据之前,我正在对数据进行一些清理。我基本上需要保留3个数据集之间的共同时间数据,并丢弃每个数据框中不在其他数据框中的行。我对pandas比较陌生,在使用类似SQL这样的东西之前,我想知道是否有什么方法可以用pandas来实现?
为了让大家更好地理解我的意思,这里是我在Excel中使用的数据框的csv文件的截图。
正如上面的截图,由于我捕捉数据的方式,我不能完全同步时间,所以当DF1有01052020 19:33:54时间戳时,DF2和DF3没有,但所有的数据帧都会有DF3的起始时间戳,所以我想从所有3个数据帧中删除不常见的时间列数据值。我也必须对每个文件末尾的数据做同样的处理。
这可能吗?
我想澄清一下,我所需要的输入和输出将类似于下面。
DF1
Time DeviceID SensorData
19:44:01 IMU1 0.26
19:44:02 IMU1 0.25
19:44:03 IMU1 0.25
19:44:04 IMU1 0.25
DF2
19:44:02 IMU2 0.27
19:44:03 IMU2 0.23
19:44:04 IMU2 0.22
19:44:05 IMU2 0.28
DF3
19:44:03 IMU3 0.23
19:44:04 IMU3 0.15
19:44:05 IMU3 0.07
19:44:06 IMU3 0.45
Output:
DF1
19:44:03 IMU1 0.25
19:44:04 IMU1 0.25
DF2
19:44:03 IMU2 0.23
19:44:04 IMU2 0.22
DF3
19:44:03 IMU3 0.23
19:44:04 IMU3 0.15
但这需要对每个数据帧进行处理,因为我需要先分别使用它们。
考虑到你所有的数据集(df1,df2,df3)都有相同的列名,你可以这样做。
In [1130]: s = df1.merge(df2,on='Time').merge(df3,on='Time')['Time']
In [1134]: df1 = df1[df1.Time.isin(s)]
In [1135]: df2 = df2[df2.Time.isin(s)]
In [1136]: df3 = df3[df3.Time.isin(s)]
In [1137]: df1
Out[1137]:
Time DeviceID SensorData
2 19:44:03 IMU1 0.25
3 19:44:04 IMU1 0.25
In [1138]: df2
Out[1138]:
Time DeviceID SensorData
1 19:44:03 IMU2 0.23
2 19:44:04 IMU2 0.22
In [1139]: df3
Out[1139]:
Time DeviceID SensorData
0 19:44:03 IMU3 0.23
1 19:44:04 IMU3 0.15