如何在Pandas中去除多余.0并将浮点列转换为字符串?
解决你的两个Pandas数据处理问题
问题1:移除Pandas中不需要的.0
这个问题得分两种场景处理,要看你是只想优化显示效果,还是要修改实际的数据类型:
场景1:仅优化显示(不改变数据类型)
如果只是不想在输出时看到.0,但数据本身还是要保留数值型,可以用Pandas的显示选项做针对性设置:
pd.set_option('display.float_format', lambda x: f'{x:.0f}' if x.is_integer() else f'{x}')
这个lambda函数会自动判断数值是否为整数,是整数就显示成无小数格式,非整数则保留原小数位,比强制统一转整数更灵活。
场景2:修改数据类型为整数(彻底去掉.0)
如果你的数据本质就是整数,只是读取时因空值或格式问题变成了浮点型,可以直接转换类型:
# 无空值的情况 df['目标列'] = df['目标列'].astype(int) # 有空值的情况,用支持空值的Int64类型(注意大写I) df['目标列'] = df['目标列'].astype('Int64')
问题2:将浮点型列转换为实际字符串(解决科学计数法+转列表失效问题)
你之前用pd.set_option只是改了显示样式,实际数据还是浮点型,所以转列表时会打回原形。要真正转成字符串,得直接操作数据本身:
方法1:先转整数再转字符串(适合无精度丢失的大整数)
你的数据是类似1.04983E+13的大整数,先转整数再转字符串不会有精度问题:
# 假设列中无空值,有空值可先用fillna处理或改用Int64类型 sample_df['gpid'] = sample_df['gpid'].astype(int).astype(str) # 现在转列表就是纯字符串格式了 gpid_list = sample_df['gpid'].tolist()
方法2:直接格式化字符串(避免超大数精度丢失)
如果是极端超大的浮点数,转整数可能出现精度损失,这时候直接用字符串格式化更稳妥:
# 用%格式化 sample_df['gpid'] = sample_df['gpid'].apply(lambda x: '%.0f' % x) # 或者用更直观的f-string sample_df['gpid'] = sample_df['gpid'].apply(lambda x: f'{x:.0f}')
验证效果
现在再查看列数据或转列表,得到的就是纯字符串的完整数字:
print(sample_df['gpid'].tolist()) # 输出示例:['10498310800133', '767838527881217']
内容的提问来源于stack exchange,提问作者Rotail
相关产品推荐
相关产品推荐

