Как преобразовать значения типа «2 + 3» в столбце Python Pandas в его агрегированное значение - PullRequest
2 голосов
/ 28 апреля 2020

У меня есть столбец в DataFrame с именем fatalities, в котором немногие значения похожи на приведенные ниже: data[''fatalities']= [1, 4, , 10, 1+8, 5, 2+9, , 16, 4+5]

Я хочу, чтобы значения типа '1+8', '2+9', etc были преобразованы в его агрегированное значение, т. Е. data[''fatalities']= [1, 4, , 10, 9, 5, 11, , 16, 9]

Я не уверен, как написать код для выполнения вышеупомянутой агрегации для одного из столбцов в pandas DataFrame в Python. Но когда я попытался с приведенным ниже кодом, он выдает ошибку.

def addition(col):
  col= col.split('+')
  col= int(col[0]) + int(col[1])
  return col

data['fatalities']= [addition(row) for row in data['fatalities']]

Ошибка:

IndexError: list index out of range

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

с использованием .map и .astype(str) для принудительного преобразования, если у вас смешанные типы данных.

df['fatalities'].astype(str).map(eval)
print(df)
   fatalities
0           1
1           4
2          10
3           9
4           5
5          11
6          16
7           9
1 голос
/ 28 апреля 2020

Используйте pandas.eval что отличается от чистого python eval :

data['fatalities'] = pd.eval(data['fatalities'])
print (data)
  fatalities
0          1
1          4
2         10
3          9
4          5
5         11
6         16
7          9

Но потому что это работает только для 100 строк, потому что ошибка :

AttributeError: у объекта 'PandasExprVisitor' нет атрибута 'visit_Ellipsis'

Тогда решение будет:

data['fatalities'] = data['fatalities'].apply(pd.eval)
...