【问题标题】:Extracting up to three numbers from string in pandas从熊猫中的字符串中提取最多三个数字
【发布时间】:2020-11-17 14:59:34
【问题描述】:

我在 pandas 中有一个列,它可以包含一到三个字符串格式的数字,我需要先提取然后总结。数字用逗号分隔,可以是浮点数,用点表示。

第二个问题是浮点数包含的小数位数过多。

df['Numbers'] = ['0, 0, 15', '0', '456.2345, 0, 23.1543', '512']

整数应该按原样提取。

浮点数应具有以下格式“\d+\.\d\d”(限制为两位小数,但不能向上或向下舍入)。

理想的输出应该是这样的:

df['number1'] = [0, 0, 456.23, 512]
df['number2'] = [0, NaN, 0, NaN]
df['number3'] = [15, NaN, 23.15, NaN]

【问题讨论】:

  • 也许使用像 r"[^,;]+" 这样的正则表达式匹配,然后在它们上使用 Float 可能会有所帮助。
  • 再次仅提取点后的两位小数,您可以使用如下正则表达式匹配:r"([0-9]{,}\.[0-9]{2})"

标签: python regex pandas


【解决方案1】:

我发现对我有用的最简单的解决方案是在 ', ' 处拆分为一个新的数据框。然后将其转换为数字,求和并将列合并回旧数据框。

df_2 = df['Numbers'].str.split(', ', expand=True)

df_2[0] = pd.to_numeric(df_2[0], errors='coerce')
df_2[1] = pd.to_numeric(df_2[1], errors='coerce')
df_2[2] = pd.to_numeric(df_2[2], errors='coerce')

df_2['Value'] = df_2[0] + df_2[1] + df_2[2]

df = df.merge(df_2['Value'], how='left', left_index=True, right_index=True)

【讨论】:

    猜你喜欢
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2019-01-07
    • 2023-03-20
    • 2020-06-03
    • 2021-01-31
    • 1970-01-01
    相关资源
    最近更新 更多