Python: словарь для pandas данных - PullRequest
0 голосов
/ 10 апреля 2020

Я хотел бы изменить словарь на pandas фрейм данных.

data = {u'Diluted Normalized EPS': [{u'date': u'2020-01-03', u'value': u'-0.446810'}, {u'date': u'2019-10-04', u'value': u'-0.765540'}, {u'date': u'2019-06-28', u'value': u
'-0.574240'}, {u'date': u'2019-03-29', u'value': u'-2.063700'}, {u'date': u'2018-12-28', u'value': u'-0.841380'}], u'Net Income Before Extra. Items': [{u'date': u'2020-01-03', u'value': u'-139.000000'}, {u'date': u'2019-10-04', u'value': u'-276.000000'}, {u'date': u'2019-06-28', u'value': u'-185.000000'}, {u'date': u'2019-03-29', u'value': u'-652.000000'}, {u'date': u'2018-12-28', u'value': u'-257.000000'}]}

Я хотел бы конвертировать в Pandas фрейм данных, как показано ниже

         date  Diluted Normalized EPS  Net Income Before Extra. Items
0  2020-01-03  -0.446810                -139.000000
1  2019-10-04  -0.765540                -276.000000
2  2019-06-28  -0.574240                -185.000000
3  2019-03-29  -2.063700                -652.000000
4  2018-12-28  -0.841380                -257.000000

pd.DataFrame(data) Невозможно вернуть желаемые результаты

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

Использовать вложенное словарное понимание с конструктором DataFrame:

d = {k:{x['date']: x['value'] for x in v} for k, v in data.items()}
df = pd.DataFrame(d).rename_axis('date').reset_index()
print(df)
         date Diluted Normalized EPS Net Income Before Extra. Items
0  2020-01-03              -0.446810                    -139.000000
1  2019-10-04              -0.765540                    -276.000000
2  2019-06-28              -0.574240                    -185.000000
3  2019-03-29              -2.063700                    -652.000000
4  2018-12-28              -0.841380                    -257.000000
1 голос
/ 10 апреля 2020

Запустите следующий код:

df = pd.DataFrame.from_dict(data).apply(
    lambda col: pd.DataFrame(col.tolist()).set_index('date').value)\
    .reset_index()

Шаги:

  1. pd.DataFrame.from_dict(data) - создает временный фрейм данных. Имеет 2 столбца (ключи вашего словаря). Каждая ячейка содержит словарь, содержащий 2 ключа ( дата и значение ).

  2. pd.DataFrame(col.tolist()) - первая часть * 1018 Функция * lambda - преобразует текущий столбец в другой временный DataFrame с 2 столбцами ( date и value ).

  3. set_index('date') - изменяет столбец дата в индексе.

  4. value - принимает только столбец значение из указанного выше фрейма данных.

  5. apply(...) - применение вышеуказанной функции lambda преобразует первый временный DataFrame практически в то, что нам нужно, то есть 2 обязательных столбца с date как индекс.

  6. reset_index() - преобразовывает индекс в обычный столбец.

...