Tengo una lista de valores que se ve así:

filtered_df['title_sentiment'].head()
2      {'neg': 0.0, 'neu': 1.0, 'pos': 0.0, 'compound...
3      {'neg': 0.0, 'neu': 0.85, 'pos': 0.15, 'compou...
12     {'neg': 0.0, 'neu': 0.744, 'pos': 0.256, 'comp...
67     {'neg': 0.0, 'neu': 1.0, 'pos': 0.0, 'compound...
130    {'neg': 0.0, 'neu': 1.0, 'pos': 0.0, 'compound...
Name: title_sentiment, dtype: object

Y quiero sumar todos los valores particulares de la lista, como 'pos'.

He intentado:

filtered_df['pos_sum'] = filtered_df['title_sentiment'].apply(lambda x: x['pos'].sum())

... que plantea:

AttributeError: el objeto 'float' no tiene el atributo 'sum'

La ayuda sería apreciada. ¡Gracias!

0
Stanislav Jirák 10 oct. 2019 a las 14:03

4 respuestas

La mejor respuesta

Debe sumar la serie devuelta desde apply. Prueba esto:

filtered_df['pos_sum'] = filtered_df['title_sentiment'].apply(lambda x: x['pos']).sum()
1
Stig Johan B. 10 oct. 2019 a las 11:07

El problema es que x['pos'] le da un float, porque está accediendo al valor de la clave 'pos' correspondiente en el diccionario. Tratar:

filtered_df['pos_sum'] = filtered_df['title_sentiment'].apply(lambda x: x['pos']).sum()

Extrae x['pos'] y luego suma.

1
Dani Mesejo 10 oct. 2019 a las 11:06

Yo intentaría:

filtered_df['pos_sum'] = sum([el['pos] for el in filtered_df['title_sentiment']])
0
Anakin87 10 oct. 2019 a las 11:08

Primero debes extraer el número de ese diccionario

filtered_df['pos_sum'] = filtered_df['title_sentiment'].apply(lambda x: x['pos']).sum()
0
Gonzalo Hernandez 10 oct. 2019 a las 11:06
58321425