首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:用reg的输出替换所有列

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

Stack Overflow用户
提问于 2019-07-21 06:38:55
回答 4查看 69关注 0票数 0

在我的数据集中,我有一个类似于这个特性的特性(称为Size):

代码语言:javascript
复制
import pandas as pd


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

此功能在一个范围内指定一个大小(具有最小和最大)或指定一个特定的数字。

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

因此,在我的示例中,输出应该是

代码语言:javascript
复制
dit={"Size" : ["0","0","5mm","15mm","10mm"] }

这就是我尝试过的:

代码语言:javascript
复制
import re
dt = re.split("-",dt.loc[:,"Size"])

但是,它抱怨说:

代码语言:javascript
复制
TypeError: expected string or bytes-like object

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

代码语言:javascript
复制
pandas.core.series.Series

我的问题是,,我如何在没有循环的情况下简单地更新这个列?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-07-21 06:54:53

这个表达式可能返回所需的输出,我假设不需要mm

代码语言:javascript
复制
import pandas as pd

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

dt['max_size']=dt["Size"].str.replace(r"^.*?(\d+)\D*$",r"\1")

print(dt)

输出

代码语言:javascript
复制
       Size max_size
0         0        0
1         0        0
2       5mm        5
3   12-15mm       15
4  3mm-10mm       10
票数 1
EN

Stack Overflow用户

发布于 2019-07-21 06:54:21

你可以用

代码语言:javascript
复制
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))

输出:

代码语言:javascript
复制
>>> dt
   Size
0     0
1     0
2   5mm
3  15mm
4  10mm

regex匹配

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

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

票数 3
EN

Stack Overflow用户

发布于 2019-07-21 06:59:08

我们可以使用这个简单的正则表达式来替换-之前的所有内容

代码语言:javascript
复制
  import pandas as pd
   dit={"Size" : ["0","0","5mm","12-15mm","3mm-10mm"] }
   dt = pd.DataFrame(data=dit)
   dt["max_size"] = dt["Size"].str.replace(".*\-","")
   dt
       Size max_size
0         0        0
1         0        0
2       5mm      5mm
3   12-15mm     15mm
4  3mm-10mm     10mm

如果最后不需要mm,那么:

代码语言:javascript
复制
dt["max_size"] = dt["Size"].str.replace(r".*-|mm$", "")
dt
       Size max_size
0         0        0
1         0        0
2       5mm        5
3   12-15mm       15
4  3mm-10mm       10
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57130915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档