Есть много примеров того, как объединить два кадра данных панд, но моя проблема в том, что у меня есть два вида данных. data1 - это данные в формате csv, которые я читаю с помощью панд и превращаю в dataframe, а другие данные2 в формате 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_data - это DataFrame от pandas. Как вы можете видеть, я ищу по всему набору данных, какая временная метка ближе всего к временной метке одного объекта, а затем я обновляю это конкретное значение, но это не сработало для меня. В итоге я испортил данные. Есть ли способ сделать это в Python? Я также могу использовать любые другие библиотеки, если они есть, поэтому я не ограничен пандами.
ожидаемый вывод - я могу добавить эти значения в json выше к существующему фрейму данных, так что в этом примере это означает, что будут добавлены новые столбцы «brakePressure», «lateralAcceleraiton» и т. Д., И значениекаждого объекта (как в 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 к метке времени brakePressure в словаре выше также находится в первой строке. По сути, я хочу сделать то же самое для всех функций в json, я хочу синхронизировать все эти значения функций с данными gps