如何格式化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))
关键说明
- Price列用
format(x, 'f')强制转为普通小数格式,再通过rstrip('0').rstrip('.')去除末尾多余的0和小数点,既消除科学计数法又保证小数位简洁 - 百分比列通过f-string直接拼接
%后缀,统一保留两位小数精度 - 千位分隔符利用Python原生字符串格式化语法
f"{x:,}"实现,自动处理整数的逗号分隔逻辑
运行代码后,输出的Markdown表格将完全匹配你期望的格式。
内容的提问来源于stack exchange,提问作者Drew Duazeh
相关产品推荐
相关产品推荐

