首页 > 解决方案 > 如何将 Python Pandas 列中的“2+3”等值转换为其聚合值

问题描述

我在 DataFrame 中有一个名为 fatalities 的列,其中一些值如下所示: data[''fatalities']= [1, 4, , 10, 1+8, 5, 2+9, , 16, 4+5]

我希望将 like 的值'1+8', '2+9', etc转换为其聚合值,即 data[''fatalities']= [1, 4, , 10, 9, 5, 11, , 16, 9]

我不确定如何编写代码来为 Python 中的 pandas DataFrame 中的一列执行上述聚合。但是当我尝试使用下面的代码时,它会抛出一个错误。

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

标签: pythonpandasdata-cleaning

解决方案


使用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)

推荐阅读