避免数据框中的 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 的相关文章

  • 导入错误:没有名为 _ssl 的模块

    带 Python 2 7 的 Ubuntu Maverick 我不知道如何解决以下导入错误 gt gt gt import ssl Traceback most recent call last File
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • Pandas Dataframe 中 bool 值的条件前向填充

    问题 如何转发 fill boolTruepandas 数据框中的值 如果是当天的第一个条目 True 到一天结束时 请参阅以下示例和所需的输出 Data import pandas as pd import numpy as np df
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • 如何将 numpy.matrix 提高到非整数幂?

    The 运算符为numpy matrix不支持非整数幂 gt gt gt m matrix 1 0 0 5 0 5 gt gt gt m 2 5 TypeError exponent must be an integer 我想要的是 oct
  • Python - 在窗口最小化或隐藏时使用 pywinauto 控制窗口

    我正在尝试做的事情 我正在尝试使用 pywinauto 在 python 中创建一个脚本 以在后台自动安装 notepad 隐藏或最小化 notepad 只是一个示例 因为我将编辑它以与其他软件一起使用 Problem 问题是我想在安装程序
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • 设置 torch.gather(...) 调用的结果

    我有一个形状为 n x m 的 2D pytorch 张量 我想使用索引列表来索引第二个维度 可以使用 torch gather 完成 然后然后还设置新值到索引的结果 Example data torch tensor 0 1 2 3 4
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 如何使用google colab在jupyter笔记本中显示GIF?

    我正在使用 google colab 想嵌入一个 gif 有谁知道如何做到这一点 我正在使用下面的代码 它并没有在笔记本中为 gif 制作动画 我希望笔记本是交互式的 这样人们就可以看到代码的动画效果 而无需运行它 我发现很多方法在 Goo
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar
  • Spark.read 在 Databricks 中给出 KrbException

    我正在尝试从 databricks 笔记本连接到 SQL 数据库 以下是我的代码 jdbcDF spark read format com microsoft sqlserver jdbc spark option url jdbc sql

随机推荐

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

    嘿 我正在开发一个 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