pd.eval() 在熊猫中的特定条件下



我只想pd.eval()那些不包含'-'符号的值。

land_area
0 969 - 2002 <-- I want to ignore this
1 80*82
2 100

法典

df['land_area'] = df['land_area'].apply(lambda x: x if x.str.contains('|'.join(['-']) else x.apply(pd.eval))

但它不起作用。它说

AttributeError: 'str' object has no attribute 'str'

我该如何解决这个问题?

df.loc[~df['land_area'].str.contains("-"), 'land_area'] = df[~df['land_area'].str.contains("-")]['land_area'].apply(eval)

使用.loc屏蔽带有"-"的答案,并将它们设置为等于.eval答案

使用np.where我们可以创建一个条件列:

df['land_area'] = (
np.where(df['land_area'].str.contains('-'), df['land_area'], pd.eval(df['land_area']))
)

或更详细地细分:

m = df['land_area'].str.contains('-')
ev = pd.eval(df['land_area'])
arr = np.where(m, df['land_area'], ev)
df['land_area'] = arr

输出

land_area
0  969 - 2002
1        6560
2         100

最新更新