python - 正则表达式从多种格式的年龄范围 DataFrame 列中提取数字

标签 python regex pandas

我正在尝试从具有多种格式的列中提取最高数字和最低数字。

例如,

  • 如果值为:“年龄 34 - 35”,我想收集 (34, 35)
  • 如果值为:“35-44岁”,我要收集(35, 44)
  • 如果值为:“75 岁以上,我可以收集 (75, '')

我目前编写了一个正则表达式,适用于某些格式,但不适用于其他格式:

dataframe[['age_low', 'age_high]] = dataframe['age'].str.extract(r'(\d*)[\s-]*(\d*)')

以下是原始年龄列中所有可能的值:

dataframe['age'].unique()

array([nan, 'Age 34 - 35 ', 'Age 78 - 79 ', 'Age 60 - 61 ',
       'Age 50 - 51 ', 'Age 20 - 21 ', 'Age 70 - 71 ', 'Age 82 - 83 ',
       'Age 88 - 89 ', 'Age 68 - 69 ', 'Age 86 - 87 ', 'Age 84 - 85 ',
       'Age 46 - 47 ', 'Age 30 - 31', 'Age 94 - 95 ', 'Age 22 - 23 ',
       'Age 44 - 45 ', 'Age 74 - 75 ', 'Age 40 - 41', 'Age 72 - 73 ',
       'Age 52 - 53 ', 'Age 48 - 49 ', 'Age 66 - 67 ', 'Age 62 - 63 ',
       'Age 56 - 57 ', 'Age 64 - 65 ', 'Age 38 - 39 ', 'Age 42 - 43 ',
       'Age 54 - 55 ', 'Age 24 - 25 ', 'Age 90 - 91 ', 'Age 76 - 77 ',
       'Age 58 - 59 ', 'Age 32 - 33', 'Age 26 - 27 ', 'Age 80 - 81 ',
       'Age 28 - 29 ', 'Age 36 - 37', 'Age 96 - 97 ',
       'Age greater than 99', 'Age 18 - 19', 'Age 92 - 93 ',
       'Age 98 - 99 ','65-74 years old', '35-44 years old', '45-54 years old',
       '75+ years old', '55-64 years old', '25-34 years old',
       '18-24 years old'], dtype=object)

最佳答案

对于问题中只有一个年龄值的可能值,该年龄始终代表范围的低端。因此,您可以仅捕获字符串中的前一个或多个数字,然后使用非捕获组来指示可能的后续非数字序列,后跟另一组一个或多个数字。如果字符串中有第二个年龄,它将被捕获为范围的高端。如果只有一个年龄,您将仅获得范围上限的 NaN 值。

例如:

import pandas as pd

ages = ['Age 96 - 97', 'Age greater than 99', '65-74 years old', '75+ years old']
df = pd.DataFrame({'age': ages})

df[['age_low', 'age_high']] = df['age'].str.extract(r'(\d+)(?:\D+(\d+))?')
print(df)
#                    age age_low age_high
# 0          Age 96 - 97      96       97
# 1  Age greater than 99      99      NaN
# 2      65-74 years old      65       74
# 3        75+ years old      75      NaN

关于python - 正则表达式从多种格式的年龄范围 DataFrame 列中提取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54911282/

相关文章:

python - 如何从python中的数组中删除分号?

python - pyspark 数据帧的缓慢过滤

python - pandas:将具有相同值的连续行分组为一组

python - 在同一页面 flask 上显示结果

python - 将列从 Pandas 日期对象更改为 python 日期时间

regex - 如何在postgresql中使用正则表达式获取特定数据

正则表达式仅匹配 C# 接口(interface)文件名

python - 在 Python 中检查驼峰大小写

python-3.x - 带有字符串列的 HDFStore 出现问题

python - 谷歌云机器学习超参数调优避免Nans