如何将 .strip().split() 函数应用于 Pandas 数据框中的整个列
how to apply .strip().split() function to an entire column in a Pandas dataframe
数据帧示例
我的 Pandas 数据框有一列 EvaRange,它是通过以下方式捕获的。
<1000 mm
1000-1200mm
1200-1400mm
>1400mm
期望输出
我想在数据帧上执行一些机器学习,所以我需要将其转换为单个数值。
到目前为止,我已经设法对数据框中的一行执行此操作,但我想将其应用于整列。
代码示例
a = df["EvaRange"][0].strip().split('mm')[0].split('-')
b = (float(a[0])+float(a[1]))/2
b
这设法 return 两个范围之间的平均值,其中有 2 个数字可用。
请求
请有人帮助我概括这一点,以便我可以将其应用于整个专栏并适应“<”和“>”值。
我建议提取数字然后对其进行平均:
df["EvaRange"].str.extract(r"(\d+)\D*(\d+)?").astype(float).mean(axis=1)
#0 1000.0
#1 1100.0
#2 1300.0
#3 1400.0
在这里,正则表达式 r"(\d+)\D*(\d+)?"
要求一个或多个数字(一个数字),可选地后跟一些非数字,可选地后跟一些数字(另一个数字)。
我建议使用 str.extractall 获取所有数字,然后在第一级获取平均值:
df.EvaRange.str.extractall(r"(\d+)").astype(float).mean(level=0)
0
0 1000.0
1 1100.0
2 1300.0
3 1400.0
基于您对剥离和拆分的想法:
(df.EvaRange
.str.strip("<> mm")
.str.split("-")
.explode()
.astype(float)
.mean(level=0)
)
0 1000.0
1 1100.0
2 1300.0
3 1400.0
Name: EvaRange, dtype: float64
数据帧示例 我的 Pandas 数据框有一列 EvaRange,它是通过以下方式捕获的。
<1000 mm
1000-1200mm
1200-1400mm
>1400mm
期望输出 我想在数据帧上执行一些机器学习,所以我需要将其转换为单个数值。
到目前为止,我已经设法对数据框中的一行执行此操作,但我想将其应用于整列。
代码示例
a = df["EvaRange"][0].strip().split('mm')[0].split('-')
b = (float(a[0])+float(a[1]))/2
b
这设法 return 两个范围之间的平均值,其中有 2 个数字可用。
请求 请有人帮助我概括这一点,以便我可以将其应用于整个专栏并适应“<”和“>”值。
我建议提取数字然后对其进行平均:
df["EvaRange"].str.extract(r"(\d+)\D*(\d+)?").astype(float).mean(axis=1)
#0 1000.0
#1 1100.0
#2 1300.0
#3 1400.0
在这里,正则表达式 r"(\d+)\D*(\d+)?"
要求一个或多个数字(一个数字),可选地后跟一些非数字,可选地后跟一些数字(另一个数字)。
我建议使用 str.extractall 获取所有数字,然后在第一级获取平均值:
df.EvaRange.str.extractall(r"(\d+)").astype(float).mean(level=0)
0
0 1000.0
1 1100.0
2 1300.0
3 1400.0
基于您对剥离和拆分的想法:
(df.EvaRange
.str.strip("<> mm")
.str.split("-")
.explode()
.astype(float)
.mean(level=0)
)
0 1000.0
1 1100.0
2 1300.0
3 1400.0
Name: EvaRange, dtype: float64