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

Pandas读取网页表格时如何保留Winning No列的逗号分隔格式?

解决pandas读取新加坡TOTO彩票历史数据时「Winning No」列逗号丢失问题

当你用pandas.read_html读取目标网页表格时,「Winning No」列的逗号分隔数字被自动合并为连续整数,这是因为pandas默认会将带逗号的数字识别为数值类型并去除分隔符。以下是两种可行的解决方法:

方法一:读取时指定列类型保留字符串格式

直接在read_html中通过converters参数强制「Winning No」列以字符串格式读取,避免自动类型转换:

import requests
import pandas as pd

pd.options.display.width = 0
pd.options.display.max_rows = 1000

url = 'https://en.lottolyzer.com/history/singapore/toto'
html = requests.get(url).content
# 指定Winning No列以字符串格式读取
df_list = pd.read_html(html, converters={'Winning No': str})

df = df_list[-1]
print(df)
df.to_csv('my data.csv', index=False)  # 建议加上index=False避免保存额外索引列

如果运行后发现列名不匹配(比如网页实际列名是「Winning Numbers」),可以先打印df.columns确认准确列名,再修改converters中的键。

方法二:用BeautifulSoup提取原始HTML内容(更可靠)

如果read_html的类型转换仍有问题,可直接用BeautifulSoup解析HTML表格,提取原始文本内容:

import requests
import pandas as pd
from bs4 import BeautifulSoup

url = 'https://en.lottolyzer.com/history/singapore/toto'
html = requests.get(url).content
soup = BeautifulSoup(html, 'html.parser')

# 找到目标表格(这里取最后一个表格,和原逻辑一致)
table = soup.find_all('table')[-1]
# 提取表头
headers = [th.text.strip() for th in table.find('thead').find_all('th')]
# 提取每行数据
rows = []
for tr in table.find('tbody').find_all('tr'):
    row_data = [td.text.strip() for td in tr.find_all('td')]
    rows.append(row_data)

# 转为DataFrame
df = pd.DataFrame(rows, columns=headers)
print(df)
df.to_csv('my data.csv', index=False)

这种方法直接读取HTML中单元格的原始文本,能100%保留「Winning No」列的逗号分隔格式,避免pandas自动类型转换的干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:17:06