【问题标题】:Pandas Extract Number with decimals from StringPandas 从字符串中提取带小数的数字
【发布时间】:2025-12-23 00:20:12
【问题描述】:

我正在尝试使用 pandas 提取所有数字,包括小数、点和逗号形成一个字符串。

这是我的数据框

       rate_number    
0      92 rate
0      33 rate
0      9.25 rate
0    (4,396 total
0    (2,620 total

我尝试使用df['rate_number'].str.extract('(\d+)', expand=False),但结果不正确。

我需要提取的DataFrame应该如下:

    rate_number    
0      92 
0      33 
0      9.25 
0    4,396 
0    2,620 

【问题讨论】:

  • “但结果不正确。” - 你能说得更具体点吗?
  • 或许可以试试'(\d+[,.]?\d*)'

标签: python pandas


【解决方案1】:

你可以试试这个:

df['rate_number'] = df['rate_number'].replace('\(|[a-zA-Z]+', '', regex=True)

更好的答案:

df['rate_number_2'] = df['rate_number'].str.extract('([0-9][,.]*[0-9]*)')

输出:

  rate_number rate_number_2
0         92             92
1         33             33
2       9.25           9.25
3      4,396          4,396
4      2,620          2,620

【讨论】:

    【解决方案2】:

    Dan 上面的评论不是很明显,但对我有用:

    for df in df_arr:
        df = df.astype(str)
        df_copy = df.copy()
        for i in range(1, len(df.columns)):
            df_copy[df.columns[i]]=df_copy[df.columns[i]].str.extract('(\d+[.]?\d*)', expand=False) #replace(r'[^0-9]+','')
        new_df_arr.append(df_copy)
    

    【讨论】:

      【解决方案3】:

      星号的位置有一点小错误:

      df['rate_number_2'] = df['rate_number'].str.extract('([0-9]*[,.][0-9]*)')
      

      【讨论】: