Skip to main content
 首页 » 编程设计

python之应用正则表达式创建新列之isdigit() 与 isnumeric()

2025年05月04日24sxdcgaq8080

我有一个如下所示的数据框

data_file= pd.DataFrame({'pid':[1,1.5,6.557657,'ABCD','1+','TRACE']}) 

如下图所示

我想要的是创建两个新列 value_as_number 和 value_as_string

这是我尝试过的

value_as_string = data_file['pid'].str.extract('(\D+)') # this chops of the `1` from `1+` which isn't expected. 

value_as_string 的输出如下所示

value_as_number = ~data_file['pid'].str.extract('(\D+)') # results in error as shown below 
 
TypeError: bad operand type for unary ~: 'float' 

我也试过了,但也没用

data_file['pid'].str.isnumeric() 
data_file['pid'].str.digit() 

我希望我的输出如下所示。单独的数字列(如 1、2、1.5、4.5)和单独的数字、字符和符号混合列(1+、ABCD、测试)等

请您参考如下方法:

您可以使用pd.to_numeric 和df.where

data_file['num'] = pd.to_numeric(data_file['pid'],errors='coerce') 
 
data_file['alpha'] = data_file['pid'].where(data_file['num'].isnull()) 
 
       pid       num  alpha 
0        1  1.000000    NaN 
1      1.5  1.500000    NaN 
2  6.55766  6.557657    NaN 
3     ABCD       NaN   ABCD 
4       1+       NaN     1+ 
5    TRACE       NaN  TRACE 

最后您可以使用 fillna('') 但尽量不要对数字列执行此操作。