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

如何格式化Pandas DataFrame数值,消除科学计数法并添加指定格式

Pandas DataFrame 格式化输出:添加美元符号、百分号与千分位分隔符

问题需求

需要将Pandas DataFrame的输出从科学计数法转换为指定样式,要求数值包含美元符号、百分号、千分位分隔符,具体场景如下:

原代码

import requests
import pandas as pd

url = "https://coinmarketcap.com/new/"
page = requests.get(url,headers={'User-Agent': 'Mozilla/5.0'}, timeout=1)
pagedata = page.text
usecols = ["Name", "Price", "1h", "24h", "MarketCap", "Volume"]#, "Blockchain"]


df = pd.read_html(pagedata)[0] #Checking table
df[["Name", "Symbol"]] = df["Name"].str.split(r"\d+", expand=True)
df = df.rename(columns={"Fully Diluted Market Cap": "MarketCap"})[usecols]

numcols = df.columns[df.columns != 'Name']
df[numcols] = df[numcols].apply(lambda c:pd.to_numeric(c.str.replace(r'[^\d.]|(?<!\d)\.|\.(?!\d)', '', regex=True)))
df = df.sort_values('24h', ascending=False)

print (df)

当前输出(科学计数法)

Name         Price     1h     24h     MarketCap    Volume
0        DollarPepe  4.402000e-02  16.87  597.88  4.000000e+00    541219
12    Perry The BNB  5.442000e-08   2.90  519.49  1.144662e+07  25606468
2              JEFF  1.802000e-01   3.66  202.07  1.802032e+07  21195038
19              KEK  5.665000e-08  57.52  154.52  4.405980e+06   5925829
16        FlokiPepe  2.836000e-09  34.48  118.71  1.193154e+06   1394199
1       Billy Token  3.168000e-05  11.69   72.83  2.198928e+06   5389786

期望输出(带指定格式)

Name  Price         1h      24h        MarketCap        Volume
0        DollarPepe  $0.04     $17.72%  16.87%           $586.08         $4.0     
12    Perry The BNB  $0.00      $2.66%   $557%    $12,086,284.00  $25,525,925
2              JEFF  $0.18      $1.91%   $194%    $17,541,936.00  $21,178,793
19              KEK  $0.00     $57.80%   $221%     $5,560,854.00   $5,864,987
16        FlokiPepe  $0.00     $22.75%   $110%     $1,132,337.00   $1,382,867
1       Billy Token  $0.00     $14.31%    $72%     $2,235,948.00   $5,405,861

解决方案

通过全局关闭科学计数法,再针对不同列设置专属格式化规则,即可实现需求。修改后的完整代码如下:

import requests
import pandas as pd

# 全局关闭科学计数法显示
pd.options.display.float_format = '{:.2f}'.format

url = "https://coinmarketcap.com/new/"
page = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'}, timeout=1)
pagedata = page.text
usecols = ["Name", "Price", "1h", "24h", "MarketCap", "Volume"]

df = pd.read_html(pagedata)[0]
df[["Name", "Symbol"]] = df["Name"].str.split(r"\d+", expand=True)
df = df.rename(columns={"Fully Diluted Market Cap": "MarketCap"})[usecols]

numcols = df.columns[df.columns != 'Name']
df[numcols] = df[numcols].apply(lambda c: pd.to_numeric(c.str.replace(r'[^\d.]|(?<!\d)\.|\.(?!\d)', '', regex=True)))
df = df.sort_values('24h', ascending=False)

# 针对各列设置格式化规则
styled_df = df.style.format({
    'Price': '${:.2f}',          # 美元格式,保留2位小数
    '1h': '${:.2f}%',            # 带美元符号的百分比
    '24h': '{:.2f}%',            # 纯百分比格式
    'MarketCap': '${:,.2f}',     # 千分位分隔符+美元符号,保留2位小数
    'Volume': '${:,.0f}'         # 千分位分隔符+美元符号,不保留小数
})

# 打印格式化后的结果
print(styled_df.to_string())

关键说明

  • pd.options.display.float_format = '{:.2f}'.format:全局禁用科学计数法,确保数值以常规浮点数形式显示。
  • style.format方法:为每一列定义专属格式规则,适配不同数据类型的展示需求:
    • 价格类列(Price):添加美元符号并控制小数位数
    • 涨幅类列(1h/24h):添加百分号,按需求调整符号位置
    • 市值/成交量列(MarketCap/Volume):添加千分位分隔符,提升大数值可读性
  • 若需要显示更多小数位数(如极小价格),可修改格式字符串中的数字,例如将{:.2f}改为{:.8f}。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 06:32:16