Pandas read_csv 转换器 – 如何处理异常(literal_eval SyntaxError)

2024-04-07

在 Pandas DataFrame 中,我正在读取一个 csv 文件,如下所示:

          A              B
  +--------------+---------------+
0 |              | ("t1", "t2")  |
  +--------------+---------------+
1 | ("t3", "t4") |               |
  +--------------+---------------+

其中两个单元格中有文字元组,其中两个单元格为空。

df = pd.read_csv(my_file.csv, dtype=str, delimiter=',',
    converters={'A': ast.literal_eval, 'B': ast.literal_eval})

转换器ast.literal_eval可以很好地将文字元组转换为代码中的 Python 元组对象 - 但前提是没有空单元格。因为我有空单元格,所以出现错误:

SyntaxError:解析时出现意外的 EOF

根据这个S/O 答案 https://stackoverflow.com/a/14635052/4909923,我应该尝试捕获空字符串的 SyntaxError 异常:

ast 使用compile 来编译源字符串(必须是 表达式)转换为 AST。如果源字符串不是有效的 表达式(如空字符串),将引发 SyntaxError 编译。

但是,我不确定如何在上下文中捕获单个单元格的异常read_csv converters.

解决这个问题的最佳方法是什么?是否有其他方法可以将空字符串/单元格转换为对象literal_eval会接受还是忽略?

注意:我的理解是,在可读文件中包含文字元组并不总是最好的事情,但就我而言,它很有用。


您可以创建一个使用的自定义函数ast.literal_eval有条件的:

from ast import literal_eval
from io import StringIO

# replicate csv file
x = StringIO("""A,B
,"('t1', 't2')"
"('t3', 't4')",""")

def literal_converter(val):
    # replace first val with '' or some other null identifier if required
    return val if val == '' else literal_eval(val)

df = pd.read_csv(x, delimiter=',', converters=dict.fromkeys('AB', literal_converter))

print(df)

          A         B
0            (t1, t2)
1  (t3, t4)          

或者,您可以使用try / except去抓SyntaxError。该解决方案更加宽松,因为它将处理其他格式错误的语法,即SyntaxError / ValueError由原因造成的other比空值。

def literal_converter(val):
    try:
        return literal_eval(val)
    except SyntaxError, ValueError:
        return val
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas read_csv 转换器 – 如何处理异常(literal_eval SyntaxError) 的相关文章

  • 在 Python distutils 中从 setup.py 查找脚本目录的正确方法?

    我正在分发一个具有以下结构的包 mymodule mymodule init py mymodule code py scripts script1 py scripts script2 py The mymodule的子目录mymodul
  • Argparse nargs="+" 正在吃位置参数

    这是我的解析器配置的一小部分 parser add argument infile help The file to be imported type argparse FileType r default sys stdin parser
  • Pandas 中允许重复列

    我将一个大的 CSV 包含股票财务数据 文件分割成更小的块 CSV 文件的格式不同 像 Excel 数据透视表之类的东西 第一列的前几行包含一些标题 公司名称 ID 等在以下列中重复 因为一家公司有多个属性 而不是一家公司只有一栏 在前几行
  • 如何创建一个语句来打印以特定单词开头的单词? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在 python 中打印从特定字母开始的单词 而不使用函数 而是使用方法或循环 1 我有一个字符串 想要打印以 m 开头的单词 S
  • 为什么Python的curses中escape键有延迟?

    In the Python curses module I have observed that there is a roughly 1 second delay between pressing the esc key and getc
  • Pandas 数据帧到 numpy 数组 [重复]

    这个问题在这里已经有答案了 我对 Python 很陌生 经验也很少 我已经设法通过复制 粘贴和替换我拥有的数据来使一些代码正常工作 但是我一直在寻找如何从数据框中选择数据 但无法理解这些示例并替换我自己的数据 总体目标 如果有人真的可以帮助
  • 使用 Python pandas 计算调整后的成本基础(股票买入/卖出的投资组合分析)

    我正在尝试对我的交易进行投资组合分析 并尝试计算调整后的成本基础价格 我几乎尝试了一切 但似乎没有任何效果 我能够计算调整后的数量 但无法获得调整后的购买价格有人可以帮忙吗 这是示例交易日志原始数据 import pandas as pd
  • C# 将数据写入 CSV 文件

    我正在尝试写入csv使用 C 语言逐行文件 这是我的功能 string first reader 0 ToString string second image ToString string csv string Format 0 1 n
  • 更改 `base_compiledir` 以将编译后的文件保存在另一个目录中

    theano base compiledir指编译后的文件存放的目录 有没有办法可以永久设置theano base compiledir到不同的位置 也许通过修改一些内部 Theano 文件的内容 http deeplearning net
  • python suds SOAP 请求中的名称空间前缀错误

    我使用 python suds 来实现客户端 并且在发送的 SOAP 标头中得到了错误的命名空间前缀 用于定义由element ref 在 wsdl 中 wsdl 正在引用数据类型 xsd 文件 请参见下文 问题出在函数上GetRecord
  • 具有字符串类型的 CAPL 关联数组

    按照此paper https kb vector com upload 551 file CAPL 3 CANNewsletter 201411 PressArticle EN pdf 我正在尝试创建一个像这样的关联数组 variables
  • 在 pytube3 中获取 youtube 视频的标题?

    我正在尝试构建一个应用程序来使用 python 下载 YouTube 视频pytube3 但我无法检索视频的标题 这是我的代码 from pytube import YouTube yt YouTube link print yt titl
  • Pandas 根据 diff 列形成簇

    我正在尝试使用 Pandas 根据表示时间 以秒为单位 的列中的差异来消除数据框中的一些接近重复项 例如 import pandas as pd numpy as np df pd DataFrame 1200 1201 1233 1555
  • 将 2D NumPy 数组按元素相乘并求和

    我想知道是否有一种更快的方法 专用 NumPy 函数来执行 2D NumPy 数组的元素乘法 然后对所有元素求和 我目前使用np sum np multiply A B 其中 A B 是相同维度的 NumPy 数组m x n 您可以使用np
  • Python 将日志滚动到变量

    我有一个使用多线程并在服务器后台运行的应用程序 为了无需登录服务器即可监控应用程序 我决定包括Bottle http bottlepy org为了响应一些HTTP端点并报告状态 执行远程关闭等 我还想添加一种查阅日志文件的方法 我可以使用以
  • 使用 Firefox 绕过弹出窗口下载文件:Selenium Python

    我正在使用 selenium 和 python 来从中下载某些文件web page http www oceanenergyireland com testfacility corkharbour observations 我之前一直使用设
  • 使用 NumPy 将非均匀数据从文件读取到数组中

    假设我有一个如下所示的文本文件 33 346 1223 10 23 11 23 12 23 13 23 14 23 15 23 16 24 10 24 11 24 12 24 13 24 14 24 15 24 16 25 14 25 15
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • Ubuntu 上的 Python 2.7

    我是 Python 新手 正在 Linux 机器 Ubuntu 10 10 上工作 它正在运行 python 2 6 但我想运行 2 7 因为它有我想使用的功能 有人敦促我不要安装 2 7 并将其设置为我的默认 python 我的问题是 如
  • 您可以使用关键字参数而不提供默认值吗?

    我习惯于在 Python 中使用这样的函数 方法定义 def my function arg1 None arg2 default do stuff here 如果我不供应arg1 or arg2 那么默认值None or default

随机推荐

  • Jekyll 中 localhost 和 github 页面的 Baseurl 行为不同

    我正在开发一个静态网站Jekyll 部署于github pages 我在使用配置文件中的 baseurl 时遇到问题 这是我的摘录 config yml baseurl blog url http remidoolaeghe github
  • Python:getopt、批处理文件和带空格的路径

    我正在使用 getopt 来解析选项和参数 我编写了一个批处理文件来调用 python 脚本 这样我就不必一遍又一遍地输入相同的命令 当我打印出参数列表时 路径被空格分割 并且每个路径都被单独解析 该路径用双引号引起来 但我不确定问题是什么
  • 无法配置 HTTPS 端点。未指定服务器证书,找不到默认的开发者证书

    我正在开发一个已配置 HTTPS 的结构应用程序 尽管我有有效的安装证书 但它抛出异常 这些说明来自这个博客 https www waynethompson com au blog dotnet dev certs https 为我工作 d
  • PHP:如何在字符串中的随机位置添加随机字符

    如何在字符串中的随机位置添加单个随机字符 0 9 或 a z 或 或 我可以通过以下方式获得随机位置 random position rand 0 5 现在我怎样才能得到一个随机数 0到9 OR随机字符 a 到 z OR OR 最后 我如何
  • 如何在 Xamarin for Android 中压缩文件?

    我有一个函数可以创建一个 zip 文件和传递的文件字符串数组 该函数确实成功创建了 zip 文件及其内部的 zip 条目文件 但这些 zip 条目文件是空的 我尝试了几种不同的方法 下面的函数代码是我最接近的工作代码 public stat
  • miniconda 和 miniforge 之间有什么区别?

    The 小型锻造厂 https github com conda forge miniforgeinstaller 是一个相对较新的 社区主导的 最小的 conda 安装程序 正如其自述文件中所述 可以直接与 Miniconda 进行比较
  • 如何在 Q/KDB 中生成格式化的日期字符串?

    如何从 Q 日期类型生成 ISO 日期字符串 yyyy MM dd 我考虑过连接各个部分 但我什至无法获取日期 月份 例如d 2015 12 01 d month prints 2015 12 即不仅仅是月份 如果您计划大规模执行此操作 即
  • pip、代理身份验证和“不支持代理方案”

    尝试在新的 python 安装上安装 pip 我遇到了代理错误 看起来像一个错误get pip or urllib3 问题是我是否必须经历设置的痛苦CNTLM 如此处所述 https stackoverflow com questions
  • 如何从控制台输入填充整数数组

    假设我知道用户将输入多少个数字 我有一个 int 数组 我想用用户输入的按特定字符 例如空格 分隔的整数来填充它 我设法用这种方法解决了它 int numbers new int 5 string input Console ReadLin
  • SciPy:半圆上的冯米塞斯分布?

    我试图找出定义包裹在半圆上的冯米塞斯分布的最佳方法 我用它来绘制不同浓度的无方向线 我目前正在使用 SciPy 的 vonmises rvs 本质上 我希望能够输入 pi 2 的平均方向 并将分布截断到两侧不超过 pi 2 我可以使用截断的
  • BeautifulSoup:抓取 HTML 仅在单击同一 URL 中的“接受”后才能访问

    我正在尝试从某个 URL 中抓取一些信息 我们称其为 www foo bar baz 当您使用网络浏览器访问该 URL 时 通常会出现 我已年满 18 岁 按钮 URL 不会改变 只有当您手动单击该按钮时才会加载实际内容 我想 模拟 单击
  • 如何在Python中对西班牙语进行编码和解码

    我用 python 2 7 编写了以下代码 coding utf 8 import sys string a os luz detr s print string encode utf 8 这会引发以下错误 print string enc
  • Xcode 6.1:加载插件失败

    我从 AppStore 更新了 Xcode 但由于以下错误消息而无法打开它 加载插件失败该插件或其必备插件之一可能丢失或损坏 可能需要重新安装 我尝试通过从应用程序文件夹中删除 Xcode 来卸载它并重新安装它 但问题仍然相同 谁能弄清楚出
  • 如何用不连续性数据绘制折线图?

    我在 R 中使用 ggplot2 库绘制图表时遇到问题 我有一个 日期 变量 其中包含 3 个 品牌 品牌中每个品牌的披露值 评级 的日期 问题是 一场活动结束后 市场就只剩下两个品牌了 因此 我想在同一图中分别绘制此事件之前和之后的线条
  • 从三个单独的列表创建嵌套字典

    我编写了一些代码来生成三个围绕项目的单独列表 第一个列表是 ID 列表 第二个列表是开始日期列表 第三个列表是结束日期列表 我想将这些列表合并到一个嵌套字典中 item 0 from start date and item 0 从 end
  • JavaScript 函数拒绝在生产服务器上工作,但在本地服务器上工作

    我正在使用从 Macromedia Dreamweaver 借用的 MM goToURL 函数将 HTTP 请求发送到服务器上的特定 URL 下面是该函数的代码 它在外部 JavaScript 文件中声明 function MM goToU
  • HTML 或 JavaScript 是否有建议的最大行长度? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 大多数编程语言的大多数样式指南都建议最大行长度 通常为 80 个字符 对于 HTML 和 JavaScript 当它嵌入到 HTML 中时 来说
  • 请求在此上下文中不可用 -> 在 Global.asax 中 -> 替换什么

    为什么下面的行在 global asax 中有错误 string RelativeFilePath AbsoluteFilePath Replace Request ServerVariables APPL PHYSICAL PATH St
  • 对象不支持属性或方法“有效”

    我的代码抛出以下错误 对象不支持属性或方法 有效 这是因为当前表单没有验证 那没问题 我只想提前检查一下我是否可以应用该方法valid到当前表单以避免烦人的 JavaScript 错误 这就是我想要的 例如 if form isValida
  • Pandas read_csv 转换器 – 如何处理异常(literal_eval SyntaxError)

    在 Pandas DataFrame 中 我正在读取一个 csv 文件 如下所示 A B 0 t1 t2 1 t3 t4 其中两个单元格中有文字元组 其中两个单元格为空 df pd read csv my file csv dtype st