Преобразуйте столбец Pandas Dataframe со словарями с общими ключами в качестве элементов в отдельный фрейм данных, используя общий - PullRequest
0 голосов
/ 27 сентября 2018

Этот вопрос является расширением от вопрос Я писал здесь некоторое время назад.Я пытаюсь понять принятый ответ, предоставленный @ patrickjlong1 (еще раз спасибо), поэтому я запускаю код шаг за шагом и проверяю результат.

Мне было трудно понять эту часть.

>>> df_initial
data                                                    seriesID
0   {'year': '2017', 'period': 'M12', 'periodName'...   SMS42000000000000001
1   {'year': '2017', 'period': 'M11', 'periodName'...   SMS42000000000000001
2   {'year': '2017', 'period': 'M10', 'periodName'...   SMS42000000000000001
3   {'year': '2017', 'period': 'M09', 'periodName'...   SMS42000000000000001
4   {'year': '2017', 'period': 'M08', 'periodName'...   SMS42000000000000001
5   {'year': '2017', 'period': 'M07', 'periodName'...   SMS42000000000000001

Элемент в каждой строке первого столбца является словарем, и все они имеют общие ключи: 'year', 'period' и т. Д. Я хочу преобразовать его в:

    footnotes   period  periodName  value   year
0   {}           M12    December    6418025 2017
0   {}           M11    November    6418195 2017
0   {}           M10    October     6418284 2017
...

Решение, предоставляемое @ patrickjlong1, заключается в преобразовании строки по одной, а затем добавлении их всех, что, как я понимаю, можно преобразовать одним словарем в один кадр данных:

    for i in range(0, len(df_initial)):
        df_row = pd.DataFrame(df_initial['data'][i])
        df_row['seriesID'] = series_col
        df = df.append(df_row, ignore_index=True)

Мой вопрос:это единственный способ конвертировать данные, как я хотел?Если нет, то каковы другие методы?

Спасибо

1 Ответ

0 голосов
/ 27 сентября 2018

Избегайте pd.DataFrame.append в цикле

Я не могу этого подчеркнуть.Метод pd.DataFrame.append является дорогостоящим, поскольку он копирует данные без необходимости.Помещение в цикл делает его в n раз дороже.

Вместо этого вы можете передать список словарей в конструктор pd.DataFrame:

df = pd.DataFrame(df_initial['seriesID'].tolist())
...