在 pandas 中加载带有二进制数据的 CSV 文件

2024-02-28

我正在尝试解析 CSV 文件(来自外部数据源),其中其中一列使用不一致的字符编码。我不想尝试让数据提供者使用一致的编码,而是只想将该列读取为二进制数据。然而,pandas.read_csv似乎在解析之前将整个文件解码为字符串,所以这给了我错误(UnicodeDecodeError)。这是一个玩具示例(python 3):

>>> from io import BytesIO
>>> import pandas as pd
>>> csv = b'Encoding,Data\nascii,abc\nwindows-1252,\xae\nutf-8,\xe2\x80\x9c1\xe2\x80\x9d\n'
>>> pd.read_csv(BytesIO(csv))
Traceback (most recent call last):
  File "pandas/_libs/parsers.pyx", line 1130, in pandas._libs.parsers.TextReader._convert_tokens
  File "pandas/_libs/parsers.pyx", line 1254, in pandas._libs.parsers.TextReader._convert_with_dtype
  File "pandas/_libs/parsers.pyx", line 1269, in pandas._libs.parsers.TextReader._string_convert
  File "pandas/_libs/parsers.pyx", line 1459, in pandas._libs.parsers._string_box_utf8
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xae in position 0: invalid start byte

我想要一个与此等效的结果:

>>> df = pd.DataFrame({'Encoding': ['ascii','windows-1252','utf-8'],
...                    'Data': [b'abc',b'\xae',b'\xe2\x80\x9c1\xe2\x80\x9d']})
>>> df
       Encoding                          Data
0         ascii                        b'abc'
1  windows-1252                       b'\xae'
2         utf-8  b'\xe2\x80\x9c1\xe2\x80\x9d'

可以(在这个玩具示例中)进一步处理如下:

>>> df.apply(lambda row: str(row.Data,row.Encoding), axis=1)
0    abc
1      ®
2    “1”
dtype: object

我更喜欢仅使用 pandas 的解决方案,但如果绝对必要,我愿意查看其他解析库。


根据塞尔吉·巴莱斯塔 https://stackoverflow.com/users/3545273/serge-ballesta回答这个帖子 https://stackoverflow.com/a/51763708/12874927

“Pandas 允许指定编码,但不允许忽略错误,不允许自动替换有问题的字节。所以没有一刀切方法,但根据实际用例有不同的方法。”

  1. 首先,尝试使用Latin1编码,因为它接受任何可能的字节作为输入,并且根据您的用例可能就足够了(我可以使用这个来运行您的玩具示例):

    data_frame = pd.read_csv(BytesIO(csv), encoding="latin1"))
    
  2. 正如 Serge 的回答中所指出的:“Pandas 没有提供特殊的错误处理,但 Pythonopen函数有(假设Python3),并且read_csv接受类似对象的文件。”对于您的情况,您可能会考虑使用'backslashreplace'它用 Python 反斜杠转义序列替换有问题的字节:

    file_encoding = 'utf8'        # set file_encoding to the file encoding (utf8, latin1, etc.)
    with open(path_to_csv, encoding=file_encoding, errors = 'backslashreplace') as my_csv:
      dataframe = pd.read_csv(my_csv)
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 pandas 中加载带有二进制数据的 CSV 文件 的相关文章

  • 如何使用一个模型中间层的输出作为另一个模型的输入?

    我训练一个模型A并尝试使用中间层的输出name layer x 作为模型的附加输入B 我尝试像 Keras 文档一样使用中间层的输出https keras io getting started faq how can i obtain th
  • 雅虎财务请求功能出现 404 客户端错误

    yahoo Financials的请求功能出现404 Client Error 直接点击以下网址没有问题 https finance yahoo com quote AAPL financials p AAPL https finance
  • 使用 NumPy 编写一个函数来计算具有特定公差的积分

    我想编写一个自定义函数来以特定容差对表达式 python 或 lambda 函数 进行数字积分 我知道与scipy integrate quad人们可以简单地改变epsabs但我想使用 numpy 自己编写该函数 From 这篇博文 htt
  • 使用pathlib获取主目录

    翻看新的pathlib在 Python 3 4 中 我注意到没有任何简单的方法来获取用户的主目录 我能想到的获取用户主目录的唯一方法是使用旧的os path像这样的库 import pathlib from os import path p
  • 如何从hdfs读取文件[重复]

    这个问题在这里已经有答案了 我在 project1目录下的hadoop文件系统中有一个文本文件名mr txt 我需要编写 python 代码来读取文本文件的第一行 而不将 mr txt 文件下载到本地 但我无法从 hdfs 打开 mr tx
  • 正在使用 PIL 保存损坏的图像

    我遇到一个问题 操作图像像素导致保存损坏的图像 因此 我使用 PIL 打开图像 然后将其转换为 NumPy 数组 image Image open myimage png np image np asarray image 然后 我转置图像
  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上
  • 在请求中设置端口

    我正在尝试利用cgminer使用 Python 的 API 我对利用requests图书馆 我了解如何做基本的事情requests but cgminer想要更具体一点 我想缩小 import socket import json sock
  • 将 window.location 传递给 Flask url_for

    我正在使用 python 在我的页面上 当匿名用户转到登录页面时 我想将一个变量传递到后端 以便它指示用户来自哪里 发送 URL 因此 当用户单击此锚链接时 a href Sign in a 我想发送用户当前所在页面的当前 URL
  • 类型错误:此 COM 对象无法自动执行 makepy 过程 - 请为此对象手动运行 makepy

    这是什么错误 回溯错误 C Users DELL PycharmProjects MyNew venv Scripts python exe C Users DELL PycharmProjects MyNew agaaaaain py T
  • 更改 Matplotlib 投影轴的背景颜色

    我正在尝试使用 Cartopy 创建一个图形 该图形需要在未投影的轴上绘制投影轴 这是一个尽可能简单的代码版本 它将轴上的内容替换为背景颜色 import matplotlib pyplot as plt import cartopy cr
  • Python:在字典中查找具有唯一值的键?

    我收到一个字典作为输入 并且想要返回一个键列表 其中字典值在该字典的范围内是唯一的 我将用一个例子来澄清 假设我的输入是字典 a 构造如下 a dict a cat 1 a fish 1 a dog 2 lt unique a bat 3
  • 为什么 Collections.counter 这么慢?

    我正在尝试解决罗莎琳德的基本问题 即计算给定序列中的核苷酸 并在列表中返回结果 对于那些不熟悉生物信息学的人来说 它只是计算字符串中 4 个不同字符 A C G T 出现的次数 我期望collections Counter是最快的方法 首先
  • 如何在matplotlib中调整x轴

    I have a graph like this x轴上的数据表示小时 所以我希望x轴设置为0 24 48 72 而不是现在的值 很难看到 0 100 之间的数据 fig1 plt figure ax fig1 add subplot 11
  • Django 将 JSON 数据传递给静态 getJSON/Javascript

    我正在尝试从 models py 中获取数据并将其序列化为views py 中的 JSON 对象 模型 py class Platform models Model platformtype models CharField max len
  • 无需访问 Internet 即可部署 Django 的简单方法?

    我拥有的是使用 Django 开发的 Intranet 站点的开发版本以及放置在 virtualenv 中的一些外部库 它运行良好 我可以在任何具有互联网连接的计算机上使用相同的参数 使用 pip 轻松设置 virtualenv 但是 不幸
  • 是否可以使用 Anaconda 包作为 Google Cloud Functions 的依赖项?

    我正在使用 Python 运行时编写 Google Cloud Function 我需要包含一些无法使用的依赖项pip 如文档中所述here https cloud google com functions docs writing spe
  • Python 相当于 Scala 案例类

    Python 中是否有与 Scala 的 Case Class 等效的东西 就像自动生成分配给字段而无需编写样板的构造函数一样 当前执行此操作的现代方法 从 Python 3 7 开始 是使用数据类 https www python org
  • 如何使用 Python/Django 在 Facebook 中获取(和使用)扩展权限

    我正在尝试编写一个简单的应用程序 让用户授予我的代码写入其页面的 Facebook 流的权限 据我了解 它应该很简单 让用户单击一个按钮 启动一个弹出窗口 其中包含我的 Facebook 应用程序中的页面 在该页面中 他们单击授予的内容流发
  • Biopython 可以执行 Seq.find() 来解释歧义代码吗

    我希望能够在 Seq 对象中搜索考虑歧义代码的子序列 Seq 对象 例如 以下内容应该是正确的 from Bio Seq import Seq from Bio Alphabet IUPAC import IUPACAmbiguousDNA

随机推荐

  • ExecutorService,如何知道所有线程何时完成而不阻塞主线程?

    我有一个多线程实现 我创建一个 ExecutorService 并提交要执行的任务 我想知道所有线程何时提交完成而不阻塞主线程和 UI 我试过了ExecutorService awaitTermination 但它会阻塞主线程和 UI 我已
  • 双线性插值

    我得到了通过双线性插值缩放图像的代码 我知道这是可行的 但我无法弄清楚如果近似像素值是边缘 边缘我的意思是它在最后一行或最后一列 像素中的一件事会怎样输入图像然后我可以 gt 坐标 x 1 y 1 的像素 这应该会导致数组索引超出范围错误
  • 如何将数组缓冲区数据与 string/json 一起发送到 NodeJS 服务器

    我需要在一个请求中将客户端页面的图像数据 作为数组缓冲区读取 以及页面生成的附加字符串 json 信息发送到 NodeJS 服务器 我需要在一个请求中处理这两个部分 因为服务器的进一步图像处理取决于发送的字符串 json 有哪些方法可以由客
  • 使用 py.test 在 Python 中测试正则表达式

    正则表达式对我来说仍然是一门黑暗艺术 但我认为这是需要练习的事情之一 因此 我更关心能够生成 py test 函数来显示我的正则表达式失败的地方 我当前的代码是这样的 my regex re compile
  • 与集合和泛型相关的 Java 10 迁移问题

    继续我之前在链接中的查询 Java 10 上的 Swing 问题 https stackoverflow com questions 51555030 swing issue on java 10 noredirect 1 comment9
  • 性能测试 OpenLayers 与 Leaflet

    我想比较 OpenLayers 和 Leaflet 之间的性能 我想测试诸如渲染矢量文件 底图 显示大量标记等最快的东西 我可以自己设置这个例子 但我不知道如何实际测量它们之间的速度差异 在哪里可以看到执行将矢量数据加载到地图等任务实际需要
  • 单独项目中的 nHibernate 域模型和映射文件

    有没有办法将域对象和映射文件分离到两个单独的项目中 我想创建一个名为 MyCompany MyProduct Core 的项目 其中包含我的域模型 以及另一个名为 MyCompany MYProduct Data Oracle 的项目 其中
  • GKE 入口 https 重定向 - FrontendConfig 无法识别

    我有一个同时包含 Http 和 Https 的 GKE 入口 我想将流量从端口 80 重定向到端口 443 我找到了这个 https github com kubernetes ingress gce issues 1075 https g
  • 无法加载配置“airbnb”以扩展 - gitlab ci

    我尝试以各种方式进行和重做 Airbnb eslint 安装 但我总是在 GitLab ci 中遇到此构建错误 它适用于我当地的环境 我使用 create react app 创建了项目 单独安装了依赖项 以免覆盖 eslint 版本 但我
  • 如何将 stderr out 和 stdout out 重新定义为单独的日志?

    如何使用日志记录模块重新定义 stderr out 和 stdout out 以单独记录文件 例如 stderr log 和 stdout log 文件 您可以简单地替换sys stdout and sys stderr使用自定义的类似文件
  • Firestore 强制用户编写 id 等于其自己的 uid 的文档的规则

    我想保证用户只能添加与其 auth uid 具有相同 id 的文档 例如 ID 为 1X0T6xC6hhRN5H02zLCN6SQtwby2 的用户只能创建 更新文档 salesmen 1X0T6xC6hhRN5H02zLCN6SQtwby
  • 如何为 Kubernetes 集群确定合适的 pod CIDR 值?

    我正在启动一个 kubernetes 集群 kubeadm init pod network cidr 192 168 1 0 16 apiserver advertise address 192 168 0 33 我对网络概念或 CIDR
  • Nuget.exe 安装 — Microsoft.CSharp 已经具有 System.Dynamic.Runtime 的依赖项

    我们通过 CI 构建中的 PowerShell 预构建脚本安装一些包 最近 我们收到了部分成功的电子邮件通知 其中提供了以下信息 Microsoft CSharp 已经具有为 System Dynamic Runtime 定义的依赖项 以下
  • YAML Jackson - 数组的锚键

    我正在尝试将 YAML 文件解析为对象 尽管 Online YAML 解析器告诉我它可以按照我想要的方式进行解析 但 Jackson YAML 解析器拒绝给我我想要的东西 这是 YAML 文件 nom service1 etats e1s1
  • 为什么 MultiMap 中不保留插入顺序?

    public class MultiMap Test public static void main String args Multimap
  • Spring MVC 预填充复选框

    首先是一些背景信息 获得了相当标准的用户角色关系 其中用户可以拥有多个角色 我将角色定义为用户类中的一组 现在我知道 html 表单将所有值都作为字符串 并且尝试获取值 因为我的自定义 Role 对象不起作用 我实现了一个 initbind
  • C2440 static_cast 无法从基类转换为派生类

    我试图理解为什么使用指针从基类到派生类的转换编译得很好 但使用非指针对象进行转换会产生错误 C2440 下面我有一个基类ThreadedMessage这是由类继承的GPSMessage struct ThreadedMessage Thre
  • 如何阻止 [Required] 注释在被覆盖的字段上被继承?

    我有一个电话号码通知模型 用户通过与帐户关联的电话号码收到紧急情况通知 并且可以设置呼叫的顺序 大多数时候 模型的电话号码部分是必需的 但在创建新用户时有一种特殊情况 我们不想强制它 我创建了一个非常简单的子对象 UserCreationP
  • 使用 e.stopPropagation() 防止事件冒泡的优点和缺点

    很多人都解释过e stopPropagation 防止事件冒泡 然而 我很难找到why人们首先想要或想要阻止事件冒泡 在我的网站上 我有许多元素 其名称如下 document body on click clickable function
  • 在 pandas 中加载带有二进制数据的 CSV 文件

    我正在尝试解析 CSV 文件 来自外部数据源 其中其中一列使用不一致的字符编码 我不想尝试让数据提供者使用一致的编码 而是只想将该列读取为二进制数据 然而 pandas read csv似乎在解析之前将整个文件解码为字符串 所以这给了我错误