Python 熊猫清理混乱的数据
我正在处理一些人的实时数据,数据框的年龄列非常混乱。 我希望预期输出为[0,10,20,30,40,50,60,70,80,90100]范围内的老化箱 清理这种混乱数据的最佳方法是什么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
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