Hej,
У меня есть исходный файл с 2 столбцами: ID и all_dimensions.Все измерения - это строки с разными парами «ключ-значение», которые не совпадают для каждого идентификатора.Я хочу сделать заголовки столбцов ключей и проанализировать соответствующее значение, если оно существует в правой ячейке.
Пример:
ID all_dimensions
12 Height:2 cm,Volume: 4cl,Weight:100g
34 Length: 10cm, Height: 5 cm
56 Depth: 80cm
78 Weight: 2 kg, Length: 7 cm
90 Diameter: 4 cm, Volume: 50 cl
Желаемый результат:
ID Height Volume Weight Length Depth Diameter
12 2 cm 4cl 100g - - -
34 5 cm - - 10cm - -
56 - - - - 80cm -
78 - - 2 kg 7 cm - -
90 - 50 cl - - - 4 cm
У меня более 100 измерений, поэтому в идеале я хотел бы написать цикл for или что-то подобноене указывать заголовок каждого столбца (см. примеры кода ниже). Я использую Python 3.7.3 и pandas 0.24.2.
Что я уже пробовал:
1) Я пытался разделитьданные в отдельных столбцах, но я не был уверен, как поступить, чтобы каждое значение было назначено в правом заголовке:
df.set_index('ID',inplace=True)
newdf = df["all_dimensions"].str.split(",|:",expand = True)
2) Используя исходный df, я использовал «str.extract» для создания новых столбцов (но тогда мне нужно было бы указать каждый заголовок):
df['Volume']=df.all_dimensions.str.extract(r'Volume:([\w\s.]*)').fillna('')
3) Чтобы решить проблему 2) с каждым заголовком, я создал список всех атрибутов измерения и подумал об использовании списка с forцикл для извлечения значений:
columns_list=df.all_dimensions.str.extract(r'^([\D]*):',expand=True).drop_duplicates()
columns_list=columns_list[0].str.strip().values.tolist()
for dimension in columns_list:
df.dimension=df.all_dimensions.str.extract(r'dimension([\w\s.]*)').fillna('')
Здесь JupyterNB дает мне предупреждение пользователя: «Pandas не позволяет создавать столбцы с помощью нового имени атрибута», и df выглядит так же, как и раньше.