【问题标题】:how to apply .strip().split() function to an entire column in a Pandas dataframe如何将 .strip().split() 函数应用于 Pandas 数据框中的整个列
【发布时间】:2020-12-03 07:25:40
【问题描述】:

数据框示例 我的 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

这设法返回两个可用数字的两个范围之间的平均值。

请求 请有人帮助我概括这一点,以便我可以将其应用于整个列并适应“”值。

【问题讨论】:

    标签: python pandas split strip


    【解决方案1】:

    我建议提取数字然后对其进行平均:

    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+)?" 要求输入一个或多个数字(一个数字),可选地后跟一些非数字,可选地后跟一些数字(另一个数字)。

    【讨论】:

      【解决方案2】:

      我建议使用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
      

      【讨论】:

        猜你喜欢
        • 2012-10-31
        • 1970-01-01
        • 1970-01-01
        • 2021-02-03
        • 2016-06-04
        • 1970-01-01
        相关资源
        最近更新 更多