【问题标题】:UnicodeEncodeError When Attempting to Print Pandas DataFrame Created With Query in Python 3尝试打印 Python 3 中使用查询创建的 Pandas DataFrame 时出现 UnicodeEncodeError
【发布时间】:2018-08-09 23:49:46
【问题描述】:

我已经搜索和搜索。我无法完全找到像我这样的问题。我确实尝试过。

我已将 Parquet 数据读入 Pandas 数据框,并使用 .query 语句过滤数据。

import pandas as pd
import fastparquet as fp

fieldsToInclude = ['ACCURACY','STATE','LOCATION','COUNTRY_CODE']

criteria = 'ACCURACY == 1.0 or COUNTRY_CODE == "AD"'

pandaParqFile = fp.ParquetFile(fn = inputPath + "World Zip Code.parquet")
newDF = pandaParqFile.to_pandas()

dataset = newDF[fieldsToInclude]

extraction = dataset.query(criteria)

with pd.option_context('display.max_rows', 100, 'display.max_columns', 10): 
    print(extraction)

当它打印时,我得到 UnicodeEncodeError: 'charmap' codec can't encode error 'u\0310' in position 4174: character maps to undefined'。这是在Geany。如果我从管理员控制台打印,我会得到不同的字符和位置。我运行的是 Windows 7。数据确实包含拉丁语、德语等字符。

当我使用 .query 的其他标准将数据打印到屏幕时,我实际上看到了一些特殊字符,所以我猜它只是某些字符?我查了“u\0310”,那是某种拉丁语 i。但我可以打印其他拉丁字符。

我尝试了一些建议来尝试通过指定编码来解决此问题,但它们似乎不起作用,因为这是一个数据框。我遇到的其他问题是关于尝试打开 CSV 文件时发生的此错误。不是我在这里所经历的。

邮政编码数据只是用来学习 Pandas 的东西。将来,这个脚本会处理什么样的数据,还不得而知。我真的在寻找解决这个问题的方法,无论数据将具有什么样的字符,它都可以防止它发生。简单地删除 LOCATION 字段(所有这些特殊字符都用于此特定数据的位置)是不可行的。

有人见过吗?提前致谢。

【问题讨论】:

  • 这很可能是重复的。在 SO 中搜索 [python] UnicodeEncodeError: 'charmap' codec can't encode error 并获得 400 次点击,从标题相似的问题开始。所显示的数据来自特定来源这一事实是无关紧要的。这是它要去的地方。某处存在编码不匹配。
  • 在 Python 3.6 中,改进了对终端的非 ascii 输出的处理。
  • 正如@TerryJanReedy 所说,这可能与pandas 完全无关,因为异常是由print() 表达式引起的。尝试从支持 UTF-8 的命令行运行 Python,或避免使用 print() 表达式(改为写入使用 UTF-8 或 UTF-16 编码打开的文件)。
  • 是的,有很多结果,一个人厌倦了阅读数小时却找不到解决方案。我会尝试更新 Python。如果做不到这一点,我想我将不得不尝试找到除了打印语句之外的东西来检查输出。我使用的是 UTF-8,所以我不明白为什么会出现这样的问题。
  • 虽然它是一个旧线程,但在控制台中执行 python 脚本之前会引用stackoverflow.com/a/43989185/282155 建议export PYTHONIOENCODING=UTF-8

标签: python pandas unicode fastparquet


【解决方案1】:

您需要指定 utf-8 为编码格式。

试试:

使用 pd.option_context('display.encoding', 'UTF-8', 'display.max_rows', 100, 'display.max_columns', 10): 打印(提取)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2014-01-06
    • 2020-10-29
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 2017-01-23
    相关资源
    最近更新 更多