Python演示了如何在另一列包含特定字符串时更新该列

2024-03-28 15:56:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,我想用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) 但什么也没得到

还有其他想法吗


Tags: 数据lambda代码importdataframepandasdfas
2条回答

您可以使用str.contains+numpy.where

df['MinP'] = np.where(df.MaxP.str.contains('+/-', regex=False), df.MaxP, df.MinP)
print(df)

输出

    MinP   MaxP
0      0     20
1            15
2    -10     12
3  +/-20  +/-20

注意,您必须使用regex=False,以避免将模式解释为正则表达式

+是regex中的一个特殊字符,因此需要执行contains('\+/-')。另外,fillna也很方便:

df['MinP'] = df.MaxP.str.extract('^\+/-(\d+)')[0].fillna(df.MinP)

输出:

 MinP   MaxP
0    0     20
1          15
2  -10     12
3   20  +/-20

注意'^\+/-(\d+)'只提取数字。如果数据包含其他字符,例如20.12e10,则可以使用'^\+/-(.+)'

相关问题 更多 >