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
相关产品推荐
相关产品推荐

