【问题标题】:Extract the numbers in a dataframe of strings based on one criteria in Python根据 Python 中的一个标准提取字符串数据框中的数字
【发布时间】:2019-07-25 11:46:52
【问题描述】:

我想提取符号-> 之前的所有数字。目前我只有这个:

df['New'] = df['Companies'].str.findall(r'(\d+(?:\.\d+)?)').str[-1]

只提取最后一个->之前的数字

我稍微修改了一下:

df['New'] = df['Companies'].str.findall(r'(\d+(?:\.\d+)?)')

但我没有得到我想要的,而是我想要类似的东西:

       Companies                                        New   New2   New3
0   -> Company A 100->Company B 60->Company C 80->...   100   60     80
1   -> Company A 100->Company B 53.1->Company C 82...   100   53.1   82
2   -> Company A 100->Company B 23-> Company D          100   23
3   -> Company 1 100->Company B 30-> Company D          100   30

请注意,New's 可以超过 3 列,具体取决于字符串中有多少 ->。此外,一些Company 名称中包含整数,我不想将其包含在新列中。

你能帮我解决这个问题吗?

【问题讨论】:

    标签: python string pandas dataframe extract


    【解决方案1】:

    Series.unstackDataFrame.add_prefix 中使用Series.str.extractall,在-> 之前使用floats:

    pat = r'(\d*\.\d+|\d+\.?)->'
    df = df.join(df['Companies'].str.extractall(pat)[0].unstack().add_prefix('New'))
    
    print (df)
                                               Companies New0  New1 New2
    0   -> Company A 100->Company B 60->Company C 80->    100    60   80
    1   -> Company A 100->Company B 53.1->Company C 82    100  53.1  NaN
    2   -> Company A 100->Company B 23-> Company D   ...  100    23  NaN
    3         -> Company 1 100->Company B 30-> Company D  100    30  NaN
    

    如果需要浮动:

    df = df.join(df['Companies'].str.extractall(pat)[0].astype(float).unstack().add_prefix('New'))
    print (df)
                                               Companies   New0  New1  New2
    0   -> Company A 100->Company B 60->Company C 80->    100.0  60.0  80.0
    1   -> Company A 100->Company B 53.1->Company C 82    100.0  53.1   NaN
    2   -> Company A 100->Company B 23-> Company D   ...  100.0  23.0   NaN
    3         -> Company 1 100->Company B 30-> Company D  100.0  30.0   NaN
    

    【讨论】:

      猜你喜欢
      • 2019-07-23
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      • 2015-05-31
      • 2023-01-22
      相关资源
      最近更新 更多