如何将“ Python Pandas”列中的“ 2 + 3”之类的值转换为其汇总值

时间:2020-04-28 05:35:55

标签: python pandas data-cleaning

我在DataFrame中有一列名为致命性的列,其中很少有以下值: 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]

我不确定如何为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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

如果数据类型混合,则使用.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