如何用pandas.read_html正确读取GitHub上分号分隔的winequality-white.csv?
解决pandas.read_html读取GitHub CSV页面的格式问题
问题原因
GitHub展示CSV文件的页面中,每一行CSV内容是以单个单元格的形式嵌入在HTML表格里的,而非按列拆分。你之前用的thousands=";"参数是用于处理千位分隔符的,和字段分隔无关,因此无法正确解析分号分隔的数据。
修正方案
读取HTML表格后,手动拆分单元格内的分号分隔字符串,重新构造正确的DataFrame:
完整代码
import pandas as pd # 读取GitHub页面的原始表格 df_raw = pd.read_html( "https://github.com/shrikant-temburwar/Wine-Quality-Dataset/blob/master/winequality-white.csv", header=0 )[0] # 1. 提取并处理表头:移除引号,按分号拆分 header_raw = df_raw.columns[1].replace('"', '') columns = header_raw.split(';') # 2. 提取数据列,按分号拆分每行内容 data_series = df_raw.iloc[:, 1].dropna() # 丢弃空行 wine_df = data_series.str.split(';', expand=True) # 3. 设置表头并转换数据类型 wine_df.columns = columns wine_df = wine_df.apply(pd.to_numeric, errors='coerce') # 查看处理后的数据 print(wine_df.head())
代码解释
- 读取HTML表格时无需设置
thousands参数,该参数不适用当前场景。 - 原始表格的第二列(索引1)包含所有CSV行数据,通过
str.split(';', expand=True)将每行拆分为多列。 - 最后用
pd.to_numeric将所有列转换为数值类型,保证后续分析可用。
内容的提问来源于stack exchange,提问作者dato datuashvili
相关产品推荐
相关产品推荐

