You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pandas.DataFrame.applymap格式化函数无效,求助CSV读取与重排

解决pandas.DataFrame.applymap无效果问题 + 格式化CSV数据

1. 先排查applymap无效的常见原因

  • 忘记赋值结果:applymap返回一个新的DataFrame,不会修改原对象,必须把结果赋值给变量(比如df = df.applymap(your_func))
  • 数据类型不是数值型:如果你的列是字符串类型,格式化函数可能无法正确处理,需要先转成数值:df = df.apply(pd.to_numeric, errors='coerce')
  • 格式化逻辑有问题:比如函数没有正确返回格式化后的内容,或者判断条件错误

2. 针对你的CSV数据的完整处理流程

先把你提供的内容整理成标准CSV格式(每行一组数据):

10,1.89e-3,1.92e-3,2.14e-3,2.23e-3,2.38e-3,2.43e-3,2.33e-3,2.87e-3
10,1.84,2.01,2.03,1.99,2.11,2.11,2.09,1.95
20,5.28e-4,4.77e-4,5.23e-4,5.62e-4,5.50e-4,5.64e-4,5.46e-4,7.45e-4
20,1.45,2.00,1.89,1.98,2.08,2.12,2.07,2.15
40,1.93e-4,1.19e-4,1.41e-4,1.42e-4,1.30e-4,1.30e-4,1.30e-4,1.68e-4
40,1.17,2.00,1.61,1.88,2.01,2.03,2.01,1.96
80,8.60e-5,2.98e-5,4.61e-5,3.86e-5,3.23e-5,3.18e-5,3.22e-5,4.33e-5
80,1.06,2.00,1.32,1.69,2.00,2.02,2.00,1.94

方法一:用applymap自定义格式化(修改数据内容)

import pandas as pd

# 1. 读取CSV,自动解析数值类型
df = pd.read_csv('data.csv', header=None)

# 2. 定义格式化规则:小数值保留6位小数,普通数值保留2位
def format_num(x):
    if isinstance(x, float):
        if abs(x) < 0.01:
            return f"{x:.6f}"
        else:
            return f"{x:.2f}"
    # 整数类型直接返回
    return x

# 3. 应用格式化并赋值(这步是关键!不赋值原DataFrame不会变)
df_formatted = df.applymap(format_num)

# 查看格式化后的结果
print(df_formatted)

方法二:设置全局显示格式(仅改变显示,不修改数据)

如果你只是想在查看/输出时格式化,不想改变数据本身的数值类型,可以用全局显示选项:

import pandas as pd

df = pd.read_csv('data.csv', header=None)

# 自定义浮点数显示逻辑:小数值显示6位,普通数值显示2位
pd.options.display.float_format = lambda x: '{:.6f}'.format(x) if abs(x) < 0.01 else '{:.2f}'.format(x)

# 直接查看即可,数据还是原始数值类型
print(df)

3. 快速验证applymap是否生效

如果之前用applymap没效果,按这几步排查:

  1. 确认执行了df = df.applymap(...),而不是只跑df.applymap(...)
  2. 运行df.dtypes检查数据类型,要是列是object类型,先转数值:df = df.apply(pd.to_numeric, errors='coerce')
  3. 单独测试格式化函数:比如format_num(1.89e-3),看是否返回0.001890

内容的提问来源于stack exchange,提问作者tmaric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:43:58