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

Python2.7下Pandas DataFrame转列表UTF-8编码转换故障求助

解决Python 2.7中Pandas DataFrame转列表的UTF-8编码异常问题

在Python 2.7里处理Unicode确实容易踩坑,毕竟它的字符串模型和Python 3差异很大。你遇到的编码异常,大概率是因为Pandas在Python 2中会把Excel里的字符串存为unicode类型,直接转成列表后,终端输出、文件写入或者后续处理时,默认用了ASCII编码去处理这些Unicode字符串,导致乱码或编码错误。下面是几个针对性的解决办法:

  • 显式转换Unicode为UTF-8字节串
    转换列表时,遍历每个元素,把unicode类型的字符串编码为UTF-8格式的str(字节串),保留其他类型的数据不变:

    # 先把DataFrame转为基础列表
    raw_list = df.values.tolist()
    # 处理每个元素的编码
    encoded_list = [
        [s.encode('utf-8') if isinstance(s, unicode) else s for s in row]
        for row in raw_list
    ]
    

    这样处理后,列表里的字符串就都是UTF-8编码的字节串,后续操作就不会触发ASCII编码的错误了。

  • 正确处理文件输出/终端显示
    如果是打印到终端,确保你的终端默认编码是UTF-8(比如Linux/macOS的终端一般默认是UTF-8,Windows可能需要调整);如果是写入文件,不要用Python 2默认的open(),改用codecs模块指定UTF-8编码写入:

    import codecs
    # 写入处理后的列表到文件
    with codecs.open('output.txt', 'w', encoding='utf-8') as f:
        f.write(str(encoded_list))
    
  • 全局默认编码调整(不推荐但应急可用)
    如果你不想逐个处理字符串,可以临时修改Python的默认编码为UTF-8,但这个方法可能影响其他依赖默认编码的代码,谨慎使用:

    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')
    

    修改后,Pandas转列表时的Unicode字符串会自动按UTF-8处理,但这个操作在Python 3里已经被移除,属于Python 2的“黑魔法”,尽量少用。

另外,补充个小提醒:Python 2.7已经停止维护多年了,如果可能的话,升级到Python 3.x会彻底解决这类编码问题,因为Python 3默认用Unicode字符串,编码处理逻辑清晰很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:59:32