Python 熊猫清理混乱的数据

Python 熊猫清理混乱的数据,python,pandas,Python,Pandas,我正在处理一些人的实时数据,数据框的年龄列非常混乱。 我希望预期输出为[0,10,20,30,40,50,60,70,80,90100]范围内的老化箱 清理这种混乱数据的最佳方法是什么 df = pd.DataFrame({'Age':['23', '64', '71', '53', '40', '45', '30-39', '50-59', '60-69', '30', '65', '44', '8-68', '21-72', '26', '36', '43', '70', '5

我正在处理一些人的实时数据,数据框的年龄列非常混乱。 我希望预期输出为[0,10,20,30,40,50,60,70,80,90100]范围内的老化箱

清理这种混乱数据的最佳方法是什么

df = pd.DataFrame({'Age':['23', '64', '71', '53', '40', '45', '30-39', '50-59', '60-69',
       '30', '65', '44', '8-68', '21-72', '26', '36', '43', '70', '52',
       '66', '27', '17', '51', '68', '35', '28', '58', '33', '31', '50',
       '24', '88', '29', '21', '78', '60', '63', '37', '32', '49',
       '20-29', '47', '18-99', '41', '39', '42', '38', '7', '40-49', '82',
       '61', '34-66', '62', '40-89', '80-89', '55', '0.25', '13-19', '69',
       '16', '8', '10', '25', '34', '55-74', '75-', '70-79', '79',
       '35-54', '55-', '95', '54', '40-50', '46', '48', '57', '56']})
您可以使用“删除可能的跟踪”将值拆分为2列,并为每列使用:

然后比较两者,如果匹配(也替换两个
系列之间缺少的值),则通过以下方式创建新列:

不匹配的值:

df1 = df[df['age_bins'].isna()]
print (df1)
      Age age_bins
12   8-68      NaN
13  21-72      NaN
42  18-99      NaN
51  34-66      NaN
53  40-89      NaN
64  55-74      NaN
68  35-54      NaN
72  40-50      NaN

预期的输出是什么?8-68
21-72
35-54
75-
的组是什么?我们可以保留(8-68、21-72)原样,以后可以删除。75-可以是69-79组的一部分。其主要思想是将单个值替换为年龄范围。例如,23应替换为19-29。@艾米-答案已编辑。
df['age_bins'] = g1.mask(g1.ne(g2.fillna(g1)))
print (df)
      Age age_bins
0      23    20-29
1      64    60-69
2      71    70-79
3      53    50-59
4      40    40-49
..    ...      ...
72  40-50      NaN
73     46    40-49
74     48    40-49
75     57    50-59
76     56    50-59

[77 rows x 2 columns]
df1 = df[df['age_bins'].isna()]
print (df1)
      Age age_bins
12   8-68      NaN
13  21-72      NaN
42  18-99      NaN
51  34-66      NaN
53  40-89      NaN
64  55-74      NaN
68  35-54      NaN
72  40-50      NaN