在我的数据集中,我有一个类似于这个特性的特性(称为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我的问题是,,我如何在没有循环的情况下简单地更新这个列?
发布于 2019-07-21 06:54:53
这个表达式可能返回所需的输出,我假设不需要mm:
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)输出
Size max_size
0 0 0
1 0 0
2 5mm 5
3 12-15mm 15
4 3mm-10mm 10发布于 2019-07-21 06:54:21
你可以用
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 10mmregex匹配
(\d+) -第1组:一个或多个数字(?:mm)? -一个可选的mm字符序列- -a连字符(\d+) -第2组:一个或多个数字(?:mm)? --一个可选的mm字符序列。str(max(int(z.group(1)), int(z.group(2)))) + "mm"在两组中保留数字的最大值,并在末尾追加mm。
发布于 2019-07-21 06:59:08
我们可以使用这个简单的正则表达式来替换-之前的所有内容
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,那么:
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 10https://stackoverflow.com/questions/57130915
复制相似问题