У меня есть следующий столбец в кадре данных:

columnA
[1.,2.3,3.]
[2]
[3,4.]

Подобно другим постам на этом форуме, я хочу обобщить этот тип списка в моем фрейме данных, поэтому в этом случае я хочу подвести итоги списка, что у меня есть новый столбец:

columnA
6.3
2
7

Я старался: df['columnA'] = df5['columnA'].apply(lambda x: x.sum()), который выдает ошибку: AttributeError: 'list' object has no attribute 'sum'

И я попробовал: df['columnA'] = (df['columnA'].values.tolist()).sum(1), который выдает ту же ошибку.

1
PV8 25 Июн 2019 в 14:43

3 ответа

Лучший ответ

Похоже, у вас также есть поплавки в столбце. используйте isinstance, чтобы проверить, является ли объект итеративным, а затем используйте сумму

< Сильный > Пример:

df = pd.DataFrame({'columnA':[[1.,2.3,3.], [2], [3,4.], 10.9]})
df["columnA"] = df["columnA"].apply(lambda x: sum(x) if isinstance(x, (list, tuple)) else x)
print(df)

< Сильный > Вывод :

   columnA
0      6.3
1      2.0
2      7.0
3     10.9
2
Rakesh 25 Июн 2019 в 11:49

Пожалуйста, попробуйте это

import pandas as pd

data = pd.DataFrame([[[2.3,2.0,1.2]],[[1.9,1]],[[4.2,0.2,6.8,9.4]]],columns=['ColA'])
data['TotalColA'] = data['ColA'].apply(lambda x: sum(x))
print(data)

< Сильный > Вывод :

                   ColA  TotalColA
0       [2.3, 2.0, 1.2]        5.5
1              [1.9, 1]        2.9
2  [4.2, 0.2, 6.8, 9.4]       20.6

Надеюсь, это может решить вашу проблему.

0
Himmat 25 Июн 2019 в 12:03

Как насчет:

>>> df.applymap(lambda x: sum(x) if isinstance(x, list) else x)
   columnA
0      6.3
1      2.0
2      7.0
3     10.9
>>>  
1
U10-Forward 25 Июн 2019 в 11:50