Pandas调用resample.interpolate后无法格式化保留两位小数怎么办
Pandas重采样后数据保留两位小数不生效解决
问题原因
核心问题是你没有接收map()方法的返回值:Pandas中绝大多数Series、DataFrame的操作默认都不会原地修改原数据,map('{:.2f}'.format)执行后会生成一个格式化完成的新Series,你没有把这个新Series赋值回原DataFrame的对应列,原数据自然不会有变化。
另外需要提前注意:如果格式化后还需要做数值计算,不要把数值转成字符串,直接做数值层面的四舍五入即可。
可用方案
- 方案1:保留数值类型(推荐,适配后续计算需求)
使用round()方法直接对数值做两位小数保留,支持单列或全表操作:
# 针对单列做处理,赋值回原列 ecoData["1/31/2019"] = ecoData["1/31/2019"].round(2) # 如果要一次性对所有列统一保留两位小数,直接操作整个DataFrame即可 ecoData = ecoData.round(2) ecoData.head()
- 方案2:转固定两位小数的字符串格式
如果需要强制固定显示两位小数(例如数值1.3需要显示为1.30的格式化场景),将map方法的返回结果赋值回原列即可:
ecoData["1/31/2019"] = ecoData["1/31/2019"].map('{:.2f}'.format) ecoData.head()
提示:该方案会把列数据类型转为字符串,后续无法直接做数值运算,无特殊格式化需求优先选方案1。
内容的提问来源于stack exchange,提问作者fransua
相关产品推荐
相关产品推荐

