避免数据框中的 KeyError

2024-03-20

我正在使用下面的代码验证我的数据框,

df = df[(df[['name', 'issuer_id', 'service_area_id']].notnull().all(axis=1)) &
                ((df['plan_year'].notnull()) & (df['plan_year'].astype(str).str.isdigit()) & (df['plan_year'].astype(str).str.len() == 4)) &
                (df[['network_url', 'formulary_url', 'sbc_download_url', 'treatment_cost_calculator_url']].astype(str).apply(lambda x: (x.str.contains('\A(https?:\/\/)([a-zA-Z0-9\-_])*(\.)*([a-zA-Z0-9\-]+)\.([a-zA-Z\.]{2,5})(\.*.*)?\Z')) | x.isin(['nan'])).all(axis=1)) &
                (df[['promotional_label']].astype(str).apply(lambda x: (x.str.len <= 65) | x.isin(['nan'])).all(axis=1)) &
                # (df[['sort_rank_override']].astype(str).apply(lambda x: (x.str.isdigit()) | x.isin(['nan'])).all(axis=1)) &
                ((df['hios_plan_identifier'].notnull()) & (df['hios_plan_identifier'].str.len() >= 10) & (df['hios_plan_identifier'].str.contains('\A(\d{5}[A-Z]{2}[a-zA-Z0-9]{3,7}-TMP|\d{5}[A-Z]{2}\d{3,7}(\-?\d{2})*)\Z'))) &
                (df['type'].isin(['MetalPlan', 'MedicarePlan', 'BasicHealthPlan', 'DualPlan', 'MedicaidPlan', 'ChipPlan'])) &
                (df['price_period'].isin(['Monthly', 'Yearly'])) &
                (df['is_age_29_plan'].astype(str).isin(['True', 'False', 'nan']))]
                # (df[['composite_rating']].astype(str).apply(lambda x: (x.str.isin(['True', 'False']) & x.isnotin(['nan'])).all(axis=1)))]

这会让我

KeyError:“['name'] 不在索引中”

当我的数据框中不存在该列时。我需要处理所有列。如何有效地向上述代码添加检查,仅在列存在时检查验证?


您可以使用intersection http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Index.intersection.html:

L = ['name', 'issuer_id', 'service_area_id']
cols = df.columns.intersection(L)

(df[cols].notnull().all(axis=1))

EDIT:

df = pd.DataFrame({
        'name':list('abcdef'),
         'plan_year':[2015,2015,2015,5,5,4],
})
print (df)
  name  plan_year
0    a       2015
1    b       2015
2    c       2015
3    d          5
4    e          5
5    f          4

想法是首先为每列创建有效值的字典:

valid = {'name':'a', 
        'issuer_id':'a',
        'service_area_id':'a',
        'plan_year':2015,
         ...}

然后通过缺失的列过滤新字典并assign http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.assign.html到原来的DataFrame并创建新的数据框:

d1 = {k: v for k, v in valid.items() if k in set(valid.keys()) - set(df.columns)}
print (d1)
{'issuer_id': 'a', 'service_area_id': 'a'}


df1 = df.assign(**d1)
print (df1)
  name  plan_year issuer_id service_area_id
0    a       2015         a               a
1    b       2015         a               a
2    c       2015         a               a
3    d          5         a               a
4    e          5         a               a
5    f          4         a               a

最后一个过滤器:

m1 = (df1[['name', 'issuer_id', 'service_area_id']].notnull().all(axis=1)) 
m2 = ((df1['plan_year'].notnull()) & 
      (df1['plan_year'].astype(str).str.isdigit()) & 
      (df1['plan_year'].astype(str).str.len() == 4))

df1 = df1[m1 & m2]
print (df1)
  name  plan_year issuer_id service_area_id
0    a       2015         a               a
1    b       2015         a               a
2    c       2015         a               a

最后您可以删除辅助列:

df1 = df1[m1 & m2].drop(d1.keys(), axis=1)
print (df1)
  name  plan_year
0    a       2015
1    b       2015
2    c       2015
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

避免数据框中的 KeyError 的相关文章

  • 如何在Python中找到低精度浮点值的原始文本表示?

    我遇到了显示问题floatPython 中的值 从外部数据源加载 它们是 32 位浮点数 但这也适用于较低精度的浮点数 以防万一 这些值是由人类在 C C 中输入的 因此与任意计算值不同 与round数字很 可能not预期的 但不能被忽略
  • Python 如果 kwargs 中的 key 并且 key 为 true

    if force in kwargs and kwargs force is True 感觉应该有更好的方法来编写这个条件 因为我重复了键和变量 假设您确实想检查返回的关键字参数是否is True 这是另一种稍微不同的方式 if kwarg
  • 如何从数据库模式自动生成示例 Django 应用程序?

    我正在评估概念验证应用程序的框架 该应用程序的生命周期约为 30 天 之后它将被遗忘或完全重写 我已确定要从现有数据库模式自动生成示例应用程序 然后调整视觉设计的某些方面 我看过一个演示红宝石 on Rails 它会为数据库中的每个表自动生
  • 如何在模型 Django 中创建必需:布尔字段

    我有一个模型 其中有一个名为的字段is student and is teacher Student and Teacher forms is teacher models BooleanField teacher status defau
  • tkinter 上的“NoneType”对象没有属性“get”错误[重复]

    这个问题在这里已经有答案了 我最近开始使用 python 3 6 进行编码tkinter并尝试创建我自己的项目repl it 该项目是一个简单的交互式待办事项列表 但是我陷入困境并且无法使该功能正常工作 该函数只是简单地获取条目并将其添加到
  • python 打开相对文件夹中所有以.txt结尾的文件

    我需要打开并解析文件夹中的所有文件 但我必须使用相对路径 类似于 input files 我知道在 JavaScript 中你可以使用 path 库来解决这个问题 我怎样才能在Python中做到这一点 这样您就可以获得路径中的文件列表作为列
  • 使用 OpenCV 进行图像模糊检测

    我正在研究图像的模糊检测 我已经用过拉普拉斯方法的方差在 OpenCV 中 img cv2 imread imgPath gray cv2 cvtColor img cv2 COLOR BGR2GRAY value cv2 Laplacia
  • 如何逐行替换(更新)文件中的文本

    我试图通过读取每一行 测试它 然后写入是否需要更新来替换文本文件中的文本 我不想保存为新文件 因为我的脚本已经先备份文件并对备份进行操作 这是我到目前为止所拥有的 我从 os walk 获取路径 并且保证 pathmatch var 正确返
  • 如何在Python中比较列表列表中的元素以及比较列表列表中的键?

    我有以下顺序 seq ATG ATG ATG ATG GAC GAT GAA CCT GCC GCG GCA GCT 这是一个字典键 用于存储每个密码子的氨基酸值 三联碱基 例如ATG GCT etc aminoacid TTT F TTC
  • 从 R 中的因子记录创建变量

    我有点迷失了 我有一个如下所示的数据框 tract ageClass count 1 0 4 71 2 0 4 192 3 0 4 81 1 5 8 9 2 5 8 86 3 5 8 42 我想要这样的结果 tract 0 4 5 8 1
  • 使用字体模块的 Tkinter 代码无法从命令行运行?

    我有使用 tkinter 的代码 我可以从 IDLE 运行得很好 但会引发异常AttributeError module object has no attribute font 当它从命令行运行时 其他 tkinter 程序工作正常 但任
  • Python 宏:用例?

    如果 Python 有一个类似于 Lisp Scheme 的宏工具 比如元Python https code google com p metapython 你会如何使用它 如果您是一名 Lisp Scheme 程序员 您会使用宏来做什么
  • Django - 从时间戳获取不同的日期

    我正在尝试按日期过滤用户 但直到我可以找到数据库中用户的第一个和最后一个日期为止 虽然我可以让我的脚本稍后过滤掉重复项 但我想从一开始就使用 Django 来完成此操作distinct因为它显着减少 我试过 User objects val
  • Python 多处理:全局对象未正确复制到子级

    前几天我回答了一个关于SO的问题 https stackoverflow com q 67047533 1925388关于并行读取 tar 文件 这是问题的要点 import bz2 import tarfile from multipro
  • 如何使 cx-oracle 将查询结果绑定到字典而不是元组?

    这是我的代码 我想找到一种方法将查询结果作为字典列表而不是元组列表返回 看起来 cx oracle 通过部分文档讨论 绑定 来支持这一点 虽然我不知道它是如何工作的 def connect dsn cx Oracle makedsn hos
  • “gi.repository.Gtk”对象没有属性“gdk”

    我正在尝试使用 GTK 创建多线程 需要 Gtk gdk 但我收到有关没有 gdk 属性的错误 我正在使用带有 Raspbian 的 Raspberry Pi 这就是我导入 GTK 库的方式 try import pygtk pygtk r
  • 类型错误:不可散列的类型:pandas 的“切片”

    我有一个 pandas 数据结构 我这样创建 test inputs pd read csv input test csv delimiter 它的形状 print test inputs shape is this 28000 784 我
  • 如何找到 JAR:/home/hadoop/contrib/streaming/hadoop-streaming.jar

    我正在练习有关 Amazon EMR 的复数视角视频教程 我被困住了 因为我收到此错误而无法继续 Not a valid JAR home hadoop contrib streaming hadoop streaming jar 请注意
  • centos上无法安装Pillow

    我上面有 centos 6 3 和 python 2 6 当我尝试通过 easy install 安装它时 出现以下错误 imaging c 76 20 error Python h No such file or directory In
  • 写入文件的正确方法?

    我想知道这样做是否有什么区别 var1 open filename w write Hello world 并做 var1 open filename w var1 write Hello world var1 close 我发现没有必要

随机推荐

  • 如何让浏览器提示保存密码?

    嘿 我正在开发一个 Web 应用程序 它有一个登录对话框 其工作原理如下 用户点击 登录 登录表单 HTML 通过 AJAX 加载并显示在页面的 DIV 中 用户在字段中输入用户名 密码并单击提交 这不是一个
  • Django 过滤器测试

    class BusinessPartnerFilter SilBaseFilter active django filters BooleanFilter name date deactivated lookup expr isnull p
  • Drop 事件在 Chrome 中未触发

    似乎 drop 事件没有在我预期的时候触发 我假设当被拖动的元素释放到目标元素上方时 会触发 drop 事件 但情况似乎并非如此 我有什么误解吗 http jsfiddle net LntTL http jsfiddle net LntTL
  • 如果我在具有备用信任路径的链中的附加证书已过期,会发生什么情况?

    我有一个由 Sectigo 前 Comodo Positive SSL 产品 颁发的证书 状态良好 1年7个月后到期 该证书由 Sectigo RSA 域验证安全服务器 CA 颁发 CA 链中有两个中间证书 由供应商提供 最近的 Secti
  • Git 合并错误“无法提交,因为您有未合并的文件”

    我忘了git pull编辑之前我的代码 当我提交新代码并尝试推送时 出现错误 无法推送 那时我做了一个git pull这使得一些有冲突的文件突出显示 我删除了冲突 但我不知道从这里该做什么 我尝试过了git commit再次但它说 不可能提
  • ChartJS 如何设置X轴的最大标签?

    我从数组接收图表数据 其中存储了从 2016 年 1 月到 2018 年 12 月的日期 在图表中 它显示 3 年的所有月份 但我只需要展示1年 有任何想法吗 在这里 我传递一个数组并更改月份的单位 还有显示格式 chartHour con
  • JUnit 测试异常[重复]

    这个问题在这里已经有答案了 我对java真的很陌生 我正在构造函数上运行一些 JUnit 测试 构造函数是这样的 如果它的参数之一被赋予 null 或空字符串 它就会抛出异常 当我在 JUnit 中使用 null 或空字符串参数测试此构造函
  • 调用 save() 时 Django 模型不保存

    所以我试图保存 django 模型 由于某种原因我只收到 500 内部服务器错误 事情是 如果我评论 Social auth save 它可以工作并且我可以操纵 对象 但不保存它 为什么会发生这种情况 我正在使用 django tastyp
  • 是否有与 Add-MailboxPermission 等效的 REST(图形或其他)?

    现在我有一个 PS 脚本正在检查邮箱权限 如果缺少 则会添加权限 在 C 中 想调用以下等效项 获取邮箱权限 如果需要 添加权限 例如 添加MailboxPermission Identity email User AdminUserNam
  • 如何在 Bash 中重复一个字符?

    我怎样才能做到这一点echo perl E say x 100 您可以使用 printf 0s 1 100 这是如何运作的 Bash 扩展 1 100 所以命令变成 printf 0s 1 2 3 4 100 我已将 printf 的格式设
  • 如何使用 socket.io 将所有客户端重定向到另一个页面?

    我正在开发一款在线多人卡牌反人类游戏 React 在前面 React 路由器用于重定向 Node 在后面 当大厅中的一个用户时 我试图重定向 大厅 或房间中的所有客户端单击 开始 但现在只有单击开始的用户被重定向 这个想法是有人会设置一个新
  • 如何使用 scipy.spatial.Delaunay 将所有点包含到无错误三角网格中?

    我正在测试scipy spatial Delaunay并且无法解决两个问题 网格有错误 网格不包含所有点 代码和绘图图像 import numpy as np from scipy spatial import Delaunay delau
  • rsync 传输后删除发送端的文件

    我想从远程机器下载大量数据 我希望每次文件下载完成时都会删除远程计算机上的数据 我怎么做 rsync 是否有一个标志来执行此操作 您需要通过 remove source files的选项rsync命令 它说rsync从发送端删除属于传输一部
  • 如何配置 Jetty 在类更改时重新加载 WebAppContext

    我正在开发一个Web应用程序 当我在Eclipse下开发时 我运行Jetty作为开发和测试环境 当我对 Java 类进行更改时 Eclipse 会自动将它们编译到构建目录 但 Jetty 在我停止并启动服务器之前不会看到更改 我知道 Jet
  • Ant需要tools.jar但找不到它

    我正在为 Java 程序构建一个开发环境 在第一次尝试 Ant 构建脚本后 我收到了以下错误 Unable to locate tools jar Expected to find it in usr lib jvm java 6 open
  • 如何从 Rust 的 Cargo 中的集成测试访问二进制文件的函数

    在我的货运项目中 我定义了两个二进制目标 如何从集成测试访问二进制文件中定义的函数 package name passman version 0 1 0 edition 2018 bin name passmand path src dae
  • 访问 pyModbus 事务中的原始字节

    我有一个 python 脚本 可以使用 pymodbus 库处理 Modbus 事务 为了进行故障排除 我想打印发送和接收到设备的原始字节 最好以十六进制格式 这是简化的代码 请参阅底部的注释以获取我想要得到的示例 我使用了 TCP 客户端
  • gcc 4.3.4 支持 unique_ptr 吗?

    我一直在尝试在本地 CygWin 安装上使用 g 编译器来实现 PIMPL 并且我开始认为这可能是我正在运行 g 4 3 4 的事实 因为它的 C 11 支持少于完美的 使用非常基线的代码 来自 MSDNhere http msdn mic
  • Sharepoint:更新内容类型时,基于内容类型的列表会发生什么情况?

    我有一个假设性问题 至少现在是这样 假设我根据某些自定义内容类型创建列表 我将大约 1000 个项目添加到该列表中 正在生产中 然后客户来了 他说他需要修改该自定义内容类型 如果我修改自定义内容类型 列表会发生什么情况 它会自动更新吗 我怀
  • 避免数据框中的 KeyError

    我正在使用下面的代码验证我的数据框 df df df name issuer id service area id notnull all axis 1 df plan year notnull df plan year astype st