提取GPA数值时丢失小数位的问题排查与解决求助
提取GPA数值时丢失小数位的问题排查与解决求助
我最近在做数据清洗练习时遇到了一个头疼的问题,想请大家帮忙看看。
首先,我查看了GPA列的所有唯一值,执行代码:
food['GPA'].unique()
得到的输出是:
array(['2.4', '3.654', '3.3', '3.2', '3.5', '2.25', '3.8', '3.904', '3.4', '3.6', '3.1', nan, '4', '2.2', '3.87', '3.7', '3.9', '2.8', '3', '3.65', '3.89', '2.9', '3.605', '3.83', '3.292', '3.35', 'Personal ', '2.6', '3.67', '3.73', '3.79 btch', '2.71', '3.68', '3.75', '3.92', 'Unknown', '3.77', '3.63', '3.882'], dtype=object)
我本来的思路是先把这些值转成字符串,再从中提取浮点数或整数,之后转成数值类型。于是写了这段代码:
food['GPA'] = food['GPA'].astype(str).str.extract('(\d*\.\d+|\d+)', expand=False) food['GPA'] = pd.to_numeric(food['GPA'], errors='coerce')
但奇怪的是,执行后GPA列的所有值都被转成了3.0和4.0,原本的小数位全都丢失了!现在再次执行查看唯一值的代码:
food['GPA'].unique()
输出变成了:
[3. 2. 4.]
我实在搞不懂为什么会这样,明明正则表达式应该能匹配到完整的小数部分啊。有没有大佬能帮我分析下小数位丢失的原因,以及怎么修改才能保留原来的数值精度呢?
备注:内容来源于stack exchange,提问作者Sjaikisan
相关产品推荐
相关产品推荐

