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

如何格式化DataFrame数值并输出为指定格式的Markdown表格

解决Pandas生成Markdown表格的格式定制问题

针对你需要的格式要求,核心思路是对DataFrame的不同列分别做格式化处理,再输出Markdown表格:

  • Price列:将数值从科学计数法转为普通小数格式,保留所有有效数字,避免自动截断
  • 1h/24h列:为数值添加百分号后缀,保持两位小数精度
  • MarketCap/Volume列:为整数添加千位分隔符,提升可读性

修改后的完整代码

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"]

# 爬取并预处理数据
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)))

# 按24h涨幅排序并取前5条
df = df.sort_values('24h', ascending=False).head(5)

# 格式化各列
# Price列:消除科学计数法,保留完整有效小数
df['Price'] = df['Price'].apply(lambda x: format(x, 'f').rstrip('0').rstrip('.') if '.' in format(x, 'f') else format(x, 'f'))
# 1h和24h列:添加百分号,保留两位小数
df['1h'] = df['1h'].apply(lambda x: f"{x:.2f}%")
df['24h'] = df['24h'].apply(lambda x: f"{x:.2f}%")
# MarketCap和Volume列:添加千位分隔符
df['MarketCap'] = df['MarketCap'].apply(lambda x: f"{x:,}")
df['Volume'] = df['Volume'].apply(lambda x: f"{x:,}")

# 生成指定格式的Markdown表格
print(df.to_markdown(index=True))

关键说明

  1. Price列用format(x, 'f')强制转为普通小数格式,再通过rstrip('0').rstrip('.')去除末尾多余的0和小数点,既消除科学计数法又保证小数位简洁
  2. 百分比列通过f-string直接拼接%后缀,统一保留两位小数精度
  3. 千位分隔符利用Python原生字符串格式化语法f"{x:,}"实现,自动处理整数的逗号分隔逻辑

运行代码后,输出的Markdown表格将完全匹配你期望的格式。

内容的提问来源于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 10:13:32