Панды превращаются в Фрейм данных

#python #pandas #dataframe

Вопрос:

У меня есть словарь, ключи-это временные шаги, а значения-список строк, все значения временных шагов имеют одинаковую длину. Это могло бы быть лучше объяснить визуально:

У меня есть это:

введите описание изображения здесь

и я хочу превратить это в: (и забросить в поплавок)

введите описание изображения здесь

Как я могу это сделать в панд ?

Комментарии:

1. Привет, было бы более полезно, если бы вы могли предоставить пример необработанных данных, а не изображение

Ответ №1:

  • учитывая, что вы предоставили данные в виде изображения, написали генератор для генерации образцов данных того же формата
  • систематически расширяйтесь в фрейм данных
    1. создайте фрейм данных с помощью json_normalize()
    2. перенесите его
    3. explode() встроенный список
    4. pd.eval встроенный кортеж
    5. наконец, создайте столбцы из кортежа
 sample = {
    f"{k:.5f}": [f"({x:.2f},{y:.2f},{z:.2f})" for x, y, z in np.random.uniform(1, 3, (7, 3))]
    for k in np.random.uniform(0.5, 2, 3)
}

print(sample)

pd.json_normalize(sample).T.rename(columns={0: "vals"}).explode("vals").apply(
    pd.eval
).loc[:, "vals"].apply(lambda a: pd.Series({"x": a[0], "y": a[1], "z": a[2]}))

 

примеры данных

 {'1.28289': ['(2.12,1.34,1.68)', '(2.34,1.16,1.89)', '(2.93,2.14,1.52)', '(2.12,1.35,2.74)', '(1.83,1.09,1.01)', '(2.77,1.05,2.02)', '(1.71,1.02,2.65)'], '1.67372': ['(2.14,2.98,1.64)', '(1.20,1.08,1.22)', '(1.87,2.04,1.95)', '(2.70,1.81,2.10)', '(2.05,1.15,1.17)', '(2.69,1.70,1.00)', '(1.91,2.77,1.56)'], '1.68896': ['(1.35,1.59,2.51)', '(1.54,2.73,1.23)', '(2.05,2.99,1.61)', '(2.17,1.39,2.02)', '(1.23,1.88,1.78)', '(2.79,1.99,1.94)', '(2.16,1.18,2.21)']}
 

выход

x y z
1.28289 2.12 1.34 1.68
1.28289 2.34 1.16 1.89
1.28289 2.93 2.14 1.52
1.28289 2.12 1.35 2.74
1.28289 1.83 1.09 1.01
1.28289 2.77 1.05 2.02
1.28289 1.71 1.02 2.65
1.67372 2.14 2.98 1.64
1.67372 1.2 1.08 1.22
1.67372 1.87 2.04 1.95
1.67372 2.7 1.81 2.1
1.67372 2.05 1.15 1.17
1.67372 2.69 1.7 1
1.67372 1.91 2.77 1.56
1.68896 1.35 1.59 2.51
1.68896 1.54 2.73 1.23
1.68896 2.05 2.99 1.61
1.68896 2.17 1.39 2.02
1.68896 1.23 1.88 1.78
1.68896 2.79 1.99 1.94
1.68896 2.16 1.18 2.21