#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)