Skip to main content
 首页 » 编程设计

python之如何使用 Pandas 以更优化的方式将字符串值转换为-int值

2025年05月04日24落叶无声

我有一个表,其中包含一些像这样的值,

 a  b 
s1  10 
s2  12- 
s3  13 
s4  1- 
s5  11 

此表中val-表示-val,即12-表示-12

我要转换成这种形式

 a  b 
s1  10 
s2  -12 
s3  13 
s4  -1 
s5  11 

如何将此列 b 转换为整数列。

到目前为止,我已经尝试过了,

mask=df['b'].str.endswith('-') 
df.loc[mask,'b']=df['b'].str.rstrip('-').astype(int)*(-1) 

我可以得到一个要求的结果,但我急切地寻找这个问题是否有其他最优解。

请您参考如下方法:

首选答案

df.assign(b=df.b.str.replace('(.+)-', r'-\1').astype(int)) 
 
    a    b 
0  s1   10 
1  s2  -12 
2  s3   13 
3  s4   -1 
4  s5   11 

尝试快速回答
使用列表理解

df.loc[:, 'b'] = pd.to_numeric( 
    [x[-1] + x[:-1] if x.endswith('-') else x for x in df.b.values.tolist()] 
) 
df 
 
    a    b 
0  s1   10 
1  s2  -12 
2  s3   13 
3  s4   -1 
4  s5   11 

搞乱答案

mask = df.b.str.endswith('-') 
df.loc[mask, 'b'] = (lambda s: s.str[-1].str.cat(s.str[:-1]))(df.b[mask]) 
df.b = df.b.astype(int) 
df 
 
    a    b 
0  s1   10 
1  s2  -12 
2  s3   13 
3  s4   -1 
4  s5   11