Как синхронизировать или объединить фрейм данных с данными JSON на основе отметки времениPython

Программы на Python
Ответить
Anonymous
 Как синхронизировать или объединить фрейм данных с данными JSON на основе отметки времени

Сообщение Anonymous »

Существует много примеров того, как объединить два фрейма данных pandas, но моя проблема в том, что у меня есть два типа данных. 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-адресом и значением, но я этого не хочу, я хочу, чтобы мои столбцы (функции) были тормозным давлением, латеральным ускорением и т. д., и в каждом столбце есть все значения, соответствующие этой функции и находящиеся внутри этого 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
Vehicle_data — это данные JSON, а gps_data — это DataFrame pandas, как вы можете видеть, я ищу по всему набору данных, какая временная метка наиболее близка к временной метке отдельного объекта, а затем обновляю это конкретное значение, но у меня это не сработало. В итоге я испортил данные. Есть ли способ сделать это в Python? Я также могу использовать любые другие библиотеки, если они есть, поэтому я не ограничен пандами.
Ожидаемый результат заключается в том, что я могу добавить эти значения в json выше к существующему фрейму данных, что означает, что в этом примере будут добавлены новые столбцы «brakePressure», «LaterAcceleration» и т. д.. и значение каждой функции (как и в 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 в словаре было помещено в первую строку, поскольку ближайшая временная метка GPS к временной метке тормозного давления в словаре выше также находится в первой строке. По сути, я хочу сделать то же самое для всех функций в JSON: я хочу синхронизировать все значения этих функций с данными GPS.

Подробнее здесь: https://stackoverflow.com/questions/587 ... -timestamp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»