Pandas DataFrame逐单元格按规则格式化数值并转字符串
Pandas条件格式化数值列方案
初始数据
示例中定义的初始DataFrame如下:
import pandas as pd df = pd.DataFrame({ 'Parameter': ['a', 'b', 'c', 'd'], 'Value': [0.222, 43544433.8383, 5462.2, 6888440902.223] })
原始Value列为float浮点类型,数据明细:
| Parameter | Value (float类型) |
|---|---|
| a | 0.222 |
| b | 43544433.8383 |
| c | 5462.2 |
| d | 6888440902.223 |
格式化规则
处理后Value列需转为str字符串类型,格式化逻辑:
- 数值大于10000时,使用保留两位小数的科学计数法格式化
- 数值小于等于10000时,固定保留两位小数格式化
期望输出效果:
| Parameter | Value (str类型) |
|---|---|
| a | 0.22 |
| b | 4.35e+07 |
| c | 5462.20 |
| d | 6.89e+09 |
实现代码
无需写复杂逐行循环,两种轻量实现方式都可满足需求:
方式1:numpy.where向量化实现(大数据量下性能最优)
import numpy as np df['Value'] = np.where( df['Value'] > 10000, df['Value'].map(lambda x: f"{x:.2e}"), df['Value'].map(lambda x: f"{x:.2f}") )
方式2:单apply判断实现(写法最简洁,无需额外依赖)
df['Value'] = df['Value'].map(lambda x: f"{x:.2e}" if x > 10000 else f"{x:.2f}")
结果校验
执行代码后打印DataFrame和列类型,可确认输出完全符合预期:
print(df) print(df.dtypes)
输出结果:
Parameter Value 0 a 0.22 1 b 4.35e+07 2 c 5462.20 3 d 6.89e+09 Parameter object Value object dtype: object
格式化语法说明:
.2e表示科学计数法保留两位小数,.2f表示固定小数位保留两位,和需求格式完全匹配。
内容的提问来源于stack exchange,提问作者joshp
相关产品推荐
相关产品推荐

