Skip to main content
 首页 » 编程设计

Python:用reg的输出替换所有列

2025年05月04日14pengyingh

在我的数据集中,我有一个像这样的特征(称为Size):

import pandas as pd 
 
 
dit={"Size" : ["0","0","5mm","12-15","3-10"] } 
dt = pd.DataFrame(data=dit) 

此功能指定范围内的大小(最小值和最大值)或特定数字。

现在,我希望将值替换为每个范围的最大值。

所以,在我的例子中,输出应该是

dit={"Size" : ["0","0","5mm","15mm","10mm"] } 

这是我尝试过的:

import re 
dt = re.split("-",dt.loc[:,"Size"]) 

但是,它提示:

TypeError: expected string or bytes-like object 

这是有道理的,因为 dt.loc[:,"Size (in mm)"] 的类型是:

pandas.core.series.Series 

我的问题是,我怎样才能在不循环的情况下简单地更新此列?

请您参考如下方法:

你可以使用

import pandas as pd 
import re 
 
dit={"Size" : ["0","0","5mm","12-15","3-10"] } 
dt = pd.DataFrame(data=dit) 
rx = r'(\d+)(?:mm)?-(\d+)(?:mm)?' 
dt['Size']=dt['Size'].apply(lambda x: re.sub(rx, lambda z: str(max(int(z.group(1)), int(z.group(2)))) + "mm", x)) 

输出:

>>> dt 
   Size 
0     0 
1     0 
2   5mm 
3  15mm 
4  10mm 

正则表达式匹配

  • (\d+) - 第 1 组:一个或多个数字
  • (?:mm)? - 一个可选的 mm 字符序列
  • - - 连字符
  • (\d+) - 第 2 组:一个或多个数字
  • (?:mm)? - - 一个可选的 mm 字符序列。

str(max(int(z.group(1)), int(z.group(2)))) + "mm" 保留两组数字的最大值并在末尾附加 mm。