Операции со словарем в столбце фрейма данных, содержащем словарь

#python-3.x #pandas #dataframe

#python-3.x #pandas #фрейм данных

Вопрос:

В одном из моих фреймов данных df1 есть столбец WR со словарем в каждой строке —

 WR

----

{'M-NET':1, 'C-VTR':2, 'I-INK':9}

{'H-NKG':6, 'M-NET':2, 'C-VTR':2}

{'N-NOC':7, 'I-INK':4}

{'L-TKP':4, 'C-VTR':3, 'H-NKG':3, 'M-NET':9}

{'M-NET':1, 'C-VTR':4}
  

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

Я пытался —

 df1['WR#'] = df1['WR'].apply(lambda x: len(x.to_dict().values()))
  

и

 df1['WR#'] = len(df1['WR'].str.split(', '))
  

но у меня это не сработало.

Мне нужен столбец WR# , который дает мне

 3
3
2
4
2
  

Ответ №1:

Если вам нужна длина, попробуйте с

 df['WR'].str.len()
0    3
1    3
2    2
3    4
4    2
dtype: int64
  

Если вам нужно sum

 pd.DataFrame(df['WR'].tolist()).sum(1)
0    12.0
1    10.0
2    11.0
3    19.0
4     5.0
dtype: float64
  

Комментарии:

1. Привет @Wen-Ben! Первый оператор дает мне очень высокие значения, например. 172, 143, 129 и т.д. когда я знаю, что все они должны быть меньше 52. Итак, я предполагаю, что это дает мне количество символов. Вторая инструкция просто снова возвращает тот же столбец WR .

2. @harry04 тогда это не dict, это строка, поэтому сделайте import ast ; df['WR']=df['WR'].apply(ast.literal_eval)