Pandas Фреймы данных в Python: Как сгладить данные и не потерять строки, в которых отсутствуют некоторые данные? (json_normalize, где функция) - PullRequest
0 голосов
/ 01 мая 2020

Я только начинаю изучать Pandas и DataFrames в Python, и в то время как мой вариант использования - взять данные тома EC2 EBS и сгладить их в CSV, где у некоторых томов есть данные вложений, а у некоторых нет что я хотел бы сделать, это использовать Pandas полностью, чтобы сделать это (вместо того, чтобы предварительно перебирать данные, чтобы добавить фиктивные данные, которые отсутствуют).

Итак, вот самый простой вариант использования, который я могу себе представить из:

import pandas as pd

states = [{'state': 'Florida',
           'shortname': 'FL',
           'counties': [{'name': 'Dade', 'population': 12345},
                        {'name': 'Broward', 'population': 40000},
                        {'name': 'Palm Beach', 'population': 60000}]},
          {'state': 'Ohio',
           'shortname': 'OH',
           'counties': [{'name': 'Summit', 'population': 1234},
                        {'name': 'Cuyahoga', 'population': 1337}]},
          {'state': 'New York',
           'shortname': 'NY',
           'counties': []}]

counties_normalized_data = pd.json_normalize(data=states, record_path='counties', record_prefix='county.', meta=['state', 'shortname'])

print(counties_normalized_data)

Это приводит к:

  county.name  county.population    state shortname
0        Dade              12345  Florida        FL
1     Broward              40000  Florida        FL
2  Palm Beach              60000  Florida        FL
3      Summit               1234     Ohio        OH
4    Cuyahoga               1337     Ohio        OH

Хотя это имеет смысл, я бы не хотел полностью потерять Нью-Йорк. Вместо этого я хотел бы сохранить Нью-Йорк и установить для county.name и county.population значение «N'A».

Поэтому я начал играть с функцией where в DataFrame, но как вы, вероятно, уже знаете, это не сработает, если все штаты не получат одинаковое количество округов. Например:

import pandas as pd

states = [{'state': 'Florida',
           'shortname': 'FL',
           'counties': [{'name': 'Dade', 'population': 12345},
                        {'name': 'Broward', 'population': 40000},
                        {'name': 'Palm Beach', 'population': 60000}]},
          {'state': 'Ohio',
           'shortname': 'OH',
           'counties': [{'name': 'Summit', 'population': 1234},
                        {'name': 'Cuyahoga', 'population': 1337}]},
          {'state': 'New York',
           'shortname': 'NY',
           'counties': []}]

df = pd.DataFrame(states)


df['counties'] = df['counties'].where(df['counties'].str.len() > 0, [{'name': 'Westchester', 'population': 3456}, {'name': 'Putnam', 'population': 1000}])

Что приводит к следующему исключению:

ValueError: operands could not be broadcast together with shapes (3,) (3,) (2,)

Итак, я пытаюсь определить, каков подходящий способ нормализации данных, в которых иногда существуют подмножества этих данных, которые не будут иметь значений.

Я читал о нормализации только подмножеств данных и последующем их слиянии, но я пока не нашел конкретного примера, который я мог бы легко понять.

Заранее благодарим за любые рекомендации, которые вы можете предоставить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...