Pandas从URL读取表格返回异常字符值,该如何解析?
解决pandas读取Google文档表格的乱码问题
问题根源
你遇到的是编码解码不匹配导致的乱码。â\x96\x88是UTF-8编码的特殊字符被错误用Latin-1(iso-8859-1)解码后的结果,原字符应为全黑方块█(Unicode U+2588)——它的UTF-8编码是E2 96 88,用Latin-1解码就会得到â\x96\x88。
解决方案
方案1:手动指定编码读取页面
先用requests获取页面内容并强制指定UTF-8编码,再交给pandas解析:
import pandas as pd import requests url = "https://docs.google.com/document/d/e/2PACX-1vRMx5YQlZNa3ra8dYYxmv-QIQ3YJe8tbI3kqcuC7lQiZm-CSEznKfN_HYNSpoXcZIV3Y_O3YoUB1ecq/pub" # 获取页面并设置UTF-8编码 resp = requests.get(url) resp.encoding = "utf-8" # 解析表格 df_list = pd.read_html(resp.text) df = df_list[0] print(df) # 查看正确字符 print(df.iloc[1, 1]) # 输出 █
方案2:修复已读取的乱码数据
如果已经读取了乱码数据,可以通过重新编码解码恢复:
# 针对单个乱码字符 garbled = 'â\x96\x88' correct = garbled.encode('latin-1').decode('utf-8') print(correct) # 输出 █ # 批量修复DataFrame的Character列 df['Character'] = df['Character'].apply(lambda x: x.encode('latin-1').decode('utf-8')) print(df)
原因说明
Google文档的公开页面默认使用UTF-8编码,但pd.read_html在自动推断编码时可能误判为Latin-1,导致UTF-8字节被错误解码成乱码。通过手动指定编码或重新编码解码,就能恢复原本的特殊字符。
内容的提问来源于stack exchange,提问作者Boltu
相关产品推荐
相关产品推荐

