在Kaggle中将数据集Expenses列从object类型转换为float类型
解决Pandas中Float列科学计数法显示问题
你遇到的科学计数法是Pandas的显示格式设置问题,不是数据本身的类型错误——转换后的float数值是正确的,只是默认显示规则导致了科学计数法的呈现。以下是几种实用的解决方法:
方法1:修改全局显示规则
通过设置Pandas的全局显示选项,让所有float列都以常规数字格式展示,可按需指定小数位数:
import pandas as pd # 示例:保留1位小数,禁用科学计数法 pd.options.display.float_format = '{:.1f}'.format # 查看数据即可看到常规格式 print(df_clean['Expenses'])
如果希望数值自动适配格式(大数值、小数值都用常规形式),可以用这个设置:
pd.options.display.float_format = '{:g}'.format
方法2:单独调整目标列的显示
不想改动全局设置的话,可针对Expenses列单独处理,同时保留原float类型:
# 新增一列用于显示常规格式(原Expenses列仍为float类型) df_clean['Expenses_show'] = df_clean['Expenses'].apply(lambda x: '{:.1f}'.format(x)) # 若在Jupyter Notebook中展示表格,也可以用style设置临时显示格式 df_clean.style.format({'Expenses': '{:.1f}'})
方法3:图表制作时的格式处理
如果只是担心图表中的数值显示,多数可视化库(如Matplotlib、Seaborn)会自动适配。需要自定义标签格式时,可在绘图时指定:
import matplotlib.pyplot as plt plt.bar(df_clean.index, df_clean['Expenses']) # 设置y轴标签为常规数字格式 plt.gca().yaxis.set_major_formatter(plt.FormatStrFormatter('%.1f')) plt.show()
额外优化:你的原有代码可以简化
- 替换
+号时加上regex=False,避免正则匹配的潜在问题:df['Expenses'] = df['Expenses'].astype(str).str.replace('+', '', regex=False) - 过滤超大值
9998948894时,可先转换为数值再过滤,不用转成字符串判断:df['Expenses'] = pd.to_numeric(df['Expenses'], errors='coerce') df_clean = df.dropna() df_clean = df_clean[df_clean["Expenses"] != 9998948894]
内容的提问来源于stack exchange,提问作者Richard Bradley
相关产品推荐
相关产品推荐

