我在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
答案 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