在我的数据集中,我有一个像这样的特征(称为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。
