如何基于时间戳同步或合并dataframe与json数据

2024-09-30 06:32:59 发布

您现在位置:Python中文网/ 问答频道 /正文

有很多关于如何合并两个熊猫数据帧的例子,但我的问题是我有两种数据。data1是一个csv数据,我用pandas读取它并将其转换为dataframe,另一个data2是json格式的。你知道吗

以下是json数据的示例:

[{'timestamp': 1572430625231, 'url': 'brakePressure', 'value': 10},
 {'timestamp': 1572430625275, 'url': 'lateralAcceleration', 'value': 120},
 {'timestamp': 1572430625290, 'url': 'longitudinalAcceleration', 'value': 110},
 {'timestamp': 1572430625299, 'url': 'acceleratorPosition', 'value': 1230},
 {'timestamp': 1572430625310, 'url': 'currentTorque', 'value': 10}]

正如您所看到的,每个特征值都在一个带有时间戳的字典中。问题是,如果我将其转换为数据帧,行将是时间戳、url和值,但我不希望这样,我希望我的列(特性)将是brakePressure、lateralAcceleration等。。在每一列中,都有对应于该特性的所有值,这些值在这个json中。你知道吗

我的目标是基于时间戳合并这两个数据集。这太难了,因为在json中,我有一个与每个特征值相关联的时间戳,而在csv数据中,我有一个对应于一行的时间戳(表示n个特征值,而不是一个特征值)。我尝试了这么多,但没有机会,所以我想也许我可以搜索最接近的时间戳,然后一次替换一个值,下面是我的尝试:

def sync_vehicle_gps_data(dataset=vehicle_data, gps_data=gps_data):
    vehicle = dataset.copy()
    gps = gps_data.copy()
    d = {}

    for json in vehicle:

        timestamp, feature, val = json.values()
        index = abs(gps['timestamp'] - timestamp).idxmin()
        print("closest value index = ", index)
        gps.at[index, feature] = val

    return gps

车辆数据是json数据,gps数据是熊猫数据帧,你可以看到我搜索了整个数据集哪个时间戳最接近单个特征时间戳,然后我更新了那个特定的值,但这对我来说效果不好。我把数据搞砸了。在python中有什么方法可以做到这一点吗?我也可以使用任何其他图书馆,如果有一个,所以我不局限于熊猫。你知道吗

预期的结果是,我可以将上面json中的那些值附加到现有的dataframe中,这意味着在本例中,新的列“brakePressure”、“lateralacceleriaton”等。。将被添加,并且每个特性的值(正如在上面的json中一样,是的,它们是零,但这只是一个示例)将被放在行中,其中该行的时间戳与上面json中每个特性的时间戳键的时间戳最接近。我知道这是一个非常复杂的问题,不容易解释,但我希望你明白我的意思。 这里有一个例子:假设这是gps数据

      timestamp        X      Y     Z 
      1572430510880  595.00  179.00 -60.00
      1572430510890   -0.23   -0.09   0.01
      1572430510900   -0.11   -0.02   0.04
      1572430510910   -1.96   -5.19  -6.10

我想要这个输出(我只为一个特性显示这个):

      timestamp        X      Y        Z    brakePressure
      1572430510880  595.00  179.00 -60.00   10
      1572430510890   -0.23   -0.09   0.01   nan
      1572430510900   -0.11   -0.02   0.04   nan
      1572430510910   -1.96   -5.19  -6.10   nan

字典中brakePressure功能的值放在第一行,因为与上面字典中brakePressure的时间戳最接近的gps时间戳也在第一行。基本上我想对json中的所有特性做同样的事情,我想将所有这些特性值与gps数据同步


Tags: 数据jsonurldataindex字典value时间
1条回答
网友
1楼 · 发布于 2024-09-30 06:32:59

参考号:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.get_dummies.html

可以创建0和1作为列值:

import json

json_data = [{}, ]
df1 = pd.read_json(json.dumps(json_data))

这给了

                timestamp                       url  value
0 2019-10-30 10:17:05.231             brakePressure     10
1 2019-10-30 10:17:05.275       lateralAcceleration    120
2 2019-10-30 10:17:05.290  longitudinalAcceleration    110
3 2019-10-30 10:17:05.299       acceleratorPosition   1230
4 2019-10-30 10:17:05.310             currentTorque     10

然后呢

ready_to_join_df = pd.get_dummies(df1, prefix="", prefix_sep="")

结果是:

                timestamp  value  acceleratorPosition  brakePressure  currentTorque  lateralAcceleration  longitudinalAcceleration
0 2019-10-30 10:17:05.231     10                    0              1              0                    0                         0
1 2019-10-30 10:17:05.275    120                    0              0              0                    1                         0
2 2019-10-30 10:17:05.290    110                    0              0              0                    0                         1
3 2019-10-30 10:17:05.299   1230                    1              0              0                    0                         0
4 2019-10-30 10:17:05.310     10                    0              0              1                    0                         0

现在可以在key timestamp上连接两个数据帧。你知道吗

相关问题 更多 >

    热门问题