我只想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