Я только начинаю изучать 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,)
Итак, я пытаюсь определить, каков подходящий способ нормализации данных, в которых иногда существуют подмножества этих данных, которые не будут иметь значений.
Я читал о нормализации только подмножеств данных и последующем их слиянии, но я пока не нашел конкретного примера, который я мог бы легко понять.
Заранее благодарим за любые рекомендации, которые вы можете предоставить.