我有一个数据帧,我想用MaxP中的值替换MinP中的值,只要MaxP有+/- [然后移除+/-并转换为数字]
我的代码可以工作,但是当Maxp没有+/-时,它在MinP中放入了一个0,相反,我想保留MinP的值(如果有的话)
import pandas as pd
df = pd.DataFrame({
'MinP':['0','','-10','',],
'MaxP':['20','15','12','+/-20']})
print(df)
df['MinP'] = df['MaxP'].apply(lambda x: df['MaxP'] if '+/-' in x else df['MinP'])
print(df)
MinP MaxP
0 0 20
1 15
2 -10 12
3 +/-20
MinP MaxP
0 0 20
1 0 15
2 0 12
3 20 +/-20
我还玩过: df.loc[df['MinP']]=np.where(df.MaxP.str.contains(“+/-”),df['MaxP'],df.MinP) 但什么也没得到
还有其他想法吗
您可以使用str.contains+numpy.where:
输出
注意,您必须使用
regex=False
,以避免将模式解释为正则表达式+
是regex中的一个特殊字符,因此需要执行contains('\+/-')
。另外,fillna
也很方便:输出:
注意:
'^\+/-(\d+)'
只提取数字。如果数据包含其他字符,例如20.1
或2e10
,则可以使用'^\+/-(.+)'
相关问题 更多 >
编程相关推荐