pandas替换列中葡萄牙语特殊字符为UTF-8编码时报TypeError如何解决
报错原因
- 语法错误:最后一行代码中将字典
lista用大括号包裹写成了{lista},相当于尝试把字典存入集合,而字典属于不可哈希类型,无法作为集合元素,因此直接抛出TypeError: unhashable type: 'dict'错误。 - 方法调用错误:
Series.str.replace()方法的第一个参数要求传入匹配模式,不支持直接传入替换映射字典。
解决方法
方案1:沿用已有的映射字典实现替换
仅需修改最后一行替换逻辑即可,注意如果你的映射表中space对应的是空格替换规则,需要先把键值对的键从'space'改为实际空格字符' ',否则无法匹配URL中的真实空格:
# 原有数据读取、字典生成逻辑不变,替换最后一行代码即可 dfgetprospect['Linkedin Url'] = dfgetprospect['Linkedin Url'].replace(lista, regex=True)
方案2:使用Python内置工具实现标准URL编码(更推荐)
无需自行维护特殊字符映射表,直接调用urllib.parse模块的标准URL编码方法,自动覆盖所有需要编码的特殊字符,不会出现遗漏:
import numpy as np import pandas as pd from urllib.parse import quote # 读取数据的逻辑和原代码一致 dfgetprospect=pd.read_excel(r'C:\Users\PICHAU\Desktop\Cargo Sapiens\Inteligencia Comercial\Upload empresas\Get Prospect.xlsx') def encode_linkedin_url(url): # 拆分URL,仅编码路径部分,避免编码https://等协议和域名前缀 parts = url.split('/', 3) if len(parts) < 4: return url scheme, _, host, path = parts encoded_path = quote(path) return f"{scheme}//{host}/{encoded_path}" dfgetprospect['Linkedin Url'] = dfgetprospect['Linkedin Url'].apply(encode_linkedin_url)
内容的提问来源于stack exchange,提问作者Leonardo David Treiger
相关产品推荐
相关产品推荐

