【问题标题】:Extract the numbers in a string from a column in pandas dataframe从熊猫数据框中的列中提取字符串中的数字
【发布时间】:2021-01-31 20:39:38
【问题描述】:

我需要使用数据框 house_price 中的“Amenities”列进行特征提取。

便利设施栏有以下数据集

house_data['Amenities']

3                       3 beds 1 bath
4              1 bed 1 bath 1 parking
5                       3 beds 1 bath
6            2 beds 2 baths 2 parking
7             3 beds 1 bath 2 parking
                    ...              
2096    3 beds 2 baths 1 parking 419m
2097          4 beds 1 bath 2 parking
2098         3 beds 2 baths 2 parking
2099         2 beds 2 baths 1 parking
2100    3 beds 2 baths 1 parking 590m
Name: Amenities, Length: 1213, dtype: object

我需要提取床、浴室和停车场的数量并将它们存储到 3 个单独的列中。

house_data["bedrooms"] = ''
house_data["bedrooms"] = house_data["Amenities"].str.extract("(\d*\.?\d+)", expand=True)



3       3
4       1
5       3
6       2
7       3
       ..
2096    3
2097    4
2098    3
2099    2
2100    3
Name: bedrooms, Length: 1213, dtype: object

上面的代码只提取整个字符串的第一个数字。如何提取代表浴室/停车场数量的数字并将它们存储在不同的列下?

【问题讨论】:

    标签: python pandas dataframe data-cleaning feature-extraction


    【解决方案1】:

    我们可以在这里使用named groupsSeries.str.extract

    regex = r'(?P<beds>\d)\sbeds?\s(?P<bath>\d+)\sbaths?\s?(?P<parking>\d)?'
    df = pd.concat([df, df['Amenities'].str.extract(regex)], axis=1)
    
                           Amenities beds bath parking
    0                  3 beds 1 bath    3    1     NaN
    1         1 bed 1 bath 1 parking    1    1       1
    2                  3 beds 1 bath    3    1     NaN
    3       2 beds 2 baths 2 parking    2    2       2
    4        3 beds 1 bath 2 parking    3    1       2
    5  3 beds 2 baths 1 parking 419m    3    2       1
    6        4 beds 1 bath 2 parking    4    1       2
    7       3 beds 2 baths 2 parking    3    2       2
    8       2 beds 2 baths 1 parking    2    2       1
    9  3 beds 2 baths 1 parking 590m    3    2       1
    

    【讨论】:

      【解决方案2】:

      你可以试试这个:

      df = df['Amenities'].str.split(r'[a-zA-Z ]+', expand=True).drop(columns=[3, 4])
      print(df)
      
         0  1  2
      0  3  1   
      1  1  1  1
      2  3  1   
      3  2  2  2
      4  3  1  2
      5  3  2  1
      6  4  1  2
      7  3  2  2
      8  2  2  1
      9  3  2  1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-18
        • 2020-06-03
        • 2020-03-07
        • 2021-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多