如何根据数据帧的 NAN 百分比删除列?

2024-04-11

对于某些列df,如果该列的 80% 是NAN.

删除此类列的最简单的代码是什么?


您可以使用isnull http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.isnull.html with mean http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.mean.html阈值,然后删除列boolean indexing http://pandas.pydata.org/pandas-docs/stable/indexing.html#boolean-indexing with loc(因为删除列),还需要反转条件 - 所以<.8意味着删除所有列>=0.8:

df = df.loc[:, df.isnull().mean() < .8]

Sample:

np.random.seed(100)
df = pd.DataFrame(np.random.random((100,5)), columns=list('ABCDE'))
df.loc[:80, 'A'] = np.nan
df.loc[:5, 'C'] = np.nan
df.loc[20:, 'D'] = np.nan

print (df.isnull().mean())
A    0.81
B    0.00
C    0.06
D    0.80
E    0.00
dtype: float64

df = df.loc[:, df.isnull().mean() < .8]
print (df.head())
         B   C         E
0  0.278369 NaN  0.004719
1  0.670749 NaN  0.575093
2  0.209202 NaN  0.219697
3  0.811683 NaN  0.274074
4  0.940030 NaN  0.175410

如果想按最小值删除列dropna http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html参数工作得很好thresh and axis=1对于删除列:

np.random.seed(1997)
df = pd.DataFrame(np.random.choice([np.nan,1], p=(0.8,0.2),size=(10,10)))
print (df)
     0   1    2    3    4    5    6    7   8    9
0  NaN NaN  NaN  1.0  1.0  NaN  NaN  NaN NaN  NaN
1  1.0 NaN  1.0  NaN  NaN  NaN  NaN  NaN NaN  NaN
2  NaN NaN  NaN  NaN  NaN  1.0  1.0  NaN NaN  NaN
3  NaN NaN  NaN  NaN  1.0  NaN  NaN  NaN NaN  NaN
4  NaN NaN  NaN  NaN  NaN  1.0  NaN  NaN NaN  1.0
5  NaN NaN  NaN  1.0  1.0  NaN  NaN  1.0 NaN  1.0
6  NaN NaN  NaN  NaN  NaN  NaN  NaN  NaN NaN  NaN
7  NaN NaN  NaN  NaN  NaN  NaN  NaN  NaN NaN  NaN
8  NaN NaN  NaN  NaN  NaN  NaN  NaN  1.0 NaN  NaN
9  1.0 NaN  NaN  NaN  1.0  NaN  NaN  1.0 NaN  NaN

df1 = df.dropna(thresh=2, axis=1)
print (df1)
     0    3    4    5    7    9
0  NaN  1.0  1.0  NaN  NaN  NaN
1  1.0  NaN  NaN  NaN  NaN  NaN
2  NaN  NaN  NaN  1.0  NaN  NaN
3  NaN  NaN  1.0  NaN  NaN  NaN
4  NaN  NaN  NaN  1.0  NaN  1.0
5  NaN  1.0  1.0  NaN  1.0  1.0
6  NaN  NaN  NaN  NaN  NaN  NaN
7  NaN  NaN  NaN  NaN  NaN  NaN
8  NaN  NaN  NaN  NaN  1.0  NaN
9  1.0  NaN  1.0  NaN  1.0  NaN

编辑:对于非布尔数据

列中 NaN 条目的总数必须小于总条目的 80%:

 df = df.loc[:, df.isnull().sum() < 0.8*df.shape[0]]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据数据帧的 NAN 百分比删除列? 的相关文章

  • Python:记录垃圾收集器

    我有一个 python 应用程序 有一些性能问题 我想将垃圾收集器的事件 特别是何时调用 添加到我的日志中 是否可以 thanks http docs python org library gc html gc set debug http
  • conda 无法从 yml 创建环境

    我尝试运行下面的代码来从 YAML 文件创建虚拟 Python 环境 我在 Ubuntu 服务器上的命令行中运行代码 虚拟环境名为 py36 当我运行下面的代码时 我收到下面的消息 环境也没有被创建 这个问题是因为我有几个必须使用 pip
  • html 解析器 python

    我正在尝试解析一个网站 我正在使用 HTMLParser 模块 问题是我想解析第一个 a href 评论后 但我真的不知道该怎么做 所以我在文档中发现有一个函数叫做handle comment 但我还没有找到如何正确使用它 我有以下内容 i
  • Python 正则表达式部分匹配或“hitEnd”

    我正在编写一个扫描器 因此我将任意字符串与正则表达式规则列表进行匹配 如果我可以模拟 Java hitEnd 功能 不仅知道正则表达式何时不匹配 还知道何时匹配 这将非常有用 can t匹配 当正则表达式匹配器在决定拒绝输入之前到达输入末尾
  • 为 Networkx 图添加标题?

    我希望我的代码创建一个带有标题的图 使用下面的代码 可以创建绘图 但没有标题 有人可以告诉我我做错了什么吗 import pandas as pd import networkx as nx from networkx algorithms
  • 用Python中的嵌套for循环替换重复的if语句?

    在我编写的下面的代码中 n 4 所以有五个 if 语句 所以如果我想将 n 增加到 比如说 10 那么就会有很多 if 语句 因此我的问题是 如何用更优雅的东西替换所有 if 语句 n p 4 5 number of trials prob
  • 错误:无法访问文件“$libdir/plpython2”:没有这样的文件或目录

    我正在运行 postgresql 9 4 PostgreSQL 9 4 4 on x86 64 unknown linux gnu compiled by gcc GCC 4 1 2 20070626 Red Hat 4 1 2 14 64
  • 如何使用 Python 多处理避免在分叉进程中加载​​父模块

    当您创建一个Pool使用Python的进程multiprocessing 这些进程将分叉 父进程中的全局变量将显示在子进程中 如下面的问题所述 如何限制多处理进程的范围 https stackoverflow com questions 2
  • 如何从 Python 中指定运行程序的输入文件?

    我正在编写一个外部脚本 以通过笔记本电脑上的 Python mrjob 模块 而不是在 Amazon Elastic Compute Cloud 或任何大型集群上 运行 mapreduce 作业 我读自mrjob文档 http packag
  • 如何对这个 Flask 应用程序进行单元测试?

    我有一个 Flask 应用程序 它使用 Flask Restless 来提供 API 我刚刚写了一些身份验证来检查 如果消费者主机被识别 该请求包含一个哈希值 通过加密 POST 的请求内容和 GET 的 URL 以及秘密 API 密钥来计
  • pip 安装软件包两次

    不幸的是我无法重现它 但我们已经见过几次了 pip 将一个软件包安装两次 如果卸载第一个 第二个就会可见并且也可以被卸载 我的问题 如果一个包安装了两次 如何用 python 检查 背景 我想编写一个测试来检查这一点 devOp Updat
  • 如何检查列表是否为空?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 例如 如果通过以下内容 a 我如何检查是否a是空的 if not a print Lis
  • 为什么“return self”返回 None ? [复制]

    这个问题在这里已经有答案了 我正在尝试获取链的顶部节点getTopParent 当我打印出来时self name 它确实打印出了父实例的名称 然而 当我回来时self 它返回 None 为什么是这样 class A def init sel
  • 如何强制 Y 轴仅使用整数

    我正在使用 matplotlib pyplot 模块绘制直方图 我想知道如何强制 y 轴标签仅显示整数 例如 0 1 2 3 等 而不显示小数 例如 0 0 5 1 1 5 2 等 我正在查看指导说明并怀疑答案就在附近matplotlib
  • 使用Beam IO ReadFromPubSub模块时,可以在Python中提取带有属性的消息吗?尚不清楚是否支持

    尝试将具有存储在 PubSub 中的属性的消息拉取到 Beam 管道中 我想知道是否添加了对 Python 的支持 这就是我无法阅读它们的原因 我看到它存在于Java中 pipeline options PipelineOptions pi
  • 为什么 bot.get_channel() 会产生 NoneType?

    我正在制作一个 Discord 机器人来处理公告命令 当使用该命令时 我希望机器人在特定通道中发送一条消息 并向用户发送一条消息以表明该命令已发送 但是 我无法将消息发送到频道 我尝试了这段代码 import discord import
  • 如何设置 matplotlib 表中列的背景颜色

    我在一个目录中有多个 txt 文件 例如 d memdump 0 txt 1 txt 10 txt 示例文本文件如下 Applications Memory Usage kB Uptime 7857410 Realtime 7857410
  • 从另一个 python 脚本获取返回信息

    我在 Linux 上 我有一个 python 脚本 我想从另一个 python 脚本调用它 我不想将其作为模块导入 为了一层安全性 现在为了学术练习 因为我想弄清楚这一点 我实际上想让一个脚本使用 os system 或另一个类似的函数 并
  • 获取调用者文件的绝对路径

    假设我在不同的目录中有两个文件 1 py 比如说 在C FIRST FOLDER 1 py and 2 py 比如说 在C SECOND FOLDER 2 py 文件1 py进口2 py using sys path insert 0 pa
  • Scala:如何获取数据框中的行范围

    我有一个DataFrame通过运行创建sqlContext readParquet 文件的一个 The DataFrame由 300 M 行组成 我需要使用这些行作为另一个函数的输入 但我想以较小的批次进行操作 以防止 OOM 错误 目前

随机推荐

  • PHP 发送的 ZIP 存档已损坏

    我正在使用 php ZipArchive 即时创建 zip 文件并将其发送回用户 我将压缩文件暂时存储在文档根目录上方的文件夹中 然后将其与代码一起发回 header Content type application zip header
  • 何时使用 $ 何时不使用

    我使用以下变量选择了一个控件 var txt text1 现在 当我必须处理文本框上的事件时 我是否必须将其引用为 txt 或 txt 即可 txt keydown function or txt keydown function 有什么好
  • 为什么 File::isDirectory 作为 FileFilter 可以正常工作?

    Why 文件 是目录在下面的示例中 作为 FileFilter 工作正常吗 File files new File listFiles File isDirectory listFiles方法需要一个FileFilter作为参数 publi
  • Android ActionBar 重新创建选项菜单

    在Android中使用ActionBar时 如何刷新选项菜单 我尝试隐藏和显示该栏 并使用 getSupportActionBar 获取它的新实例 我正在尝试实现一个登录 注销按钮 该按钮将根据用户的状态动态更改 这是我的 onCreate
  • Google Big-query api 403-禁止异常

    当我使用 Big Query API 的 java 应用程序执行查询时 出现以下 JSON 异常 以下是我得到的异常 error errors domain global reason accessDenied message Access
  • 使用 regexp_substr 选择逗号之间的单词(不包括双引号)

    我试图从逗号分隔列表中返回字符串列表 但是 我仍然想返回字符串中出现在双引号之间的逗号 这是我目前的声明 SELECT regexp substr one two three four five six seven eight nine n
  • Jquery Draggables:删除元素会更改其他删除元素的位置

    当放置 放置元素 通过从一个 DIV 拖动到另一个 DIV 然后删除放置的 DIV 中的一个元素时 其中一些元素会更改位置 这是一个测试场景 http jsfiddle net TcYHW 8 http jsfiddle net TcYHW
  • 你已经从颠覆转向善变了吗?值得付出努力吗?

    我正在更好地了解 Mercurial 版本控制系统 并且正在考虑从 SVN 进行转换 有人已经转换了吗 对于您和您的团队来说 转变是否困难 您能否给出一些建议 是继续使用 SVN 还是选择 Mercurial 一旦开始 你就永远不想回去 优
  • Gnuplot脚本创建后消失

    我有一个 gnuplot 脚本 我的系统是ubuntu 14 04 当我在终端输入gnuplot myPlot 剧情将会消失 它不会保留在屏幕上 我在这个堆栈中看到了类似的question https stackoverflow com q
  • 如何在更新宏变量的数据步骤中调用宏并立即使用该值?

    下面的例子非常简单 可能可以用更简单的方式解决 不过 我有兴趣让它发挥作用 以下示例基于 sashelp library 的 cars dataset 首先 我有一个名为 fun 的宏 proc contents data sashelp
  • 如何在 Jinja 中对齐 Pandas DataFrame 列号文本

    我通过 Jinja 将 Pandas Dataframe 渲染到网页 但注意到数字列左对齐 当我尝试在特定列上应用下面的代码以右对齐并加载网页时 df df style set properties subset col1 col2 tex
  • 使用 pickle 反序列化大型 numpy 数组比使用 numpy 慢几个数量级

    我正在反序列化大型 numpy 数组 本例中为 500MB 我发现不同方法的结果存在数量级差异 以下是我计时的 3 种方法 我正在接收来自multiprocessing shared memory包 所以数据作为一个memoryview目的
  • 对通过 OpenXML 与 Microsoft Word 通信的应用程序进行单元测试

    我正在修改一个与 Microsoft Word 进行大量 对话 的应用程序 现在 使用 COM 互操作 但我需要将其更改为 Open XML 我想为此引入单元测试 但我不知道如何做到这一点 这是例如操作之一 模板word文档包含一些书签 该
  • Swiftmailer 配置:使用 gmail 发送邮件

    我可以使用 swiftmailer 从我的电脑发送电子邮件 但邮件未在服务器中发送 我正在使用 swiftmailer 5 0 1 项目详细信息是 Netbeans 中的一个简单的 php 项目 迅捷邮递员 5 0 1 树枝1 13 1 我
  • 包含范围内的随机浮点双精度

    我们可以很容易地得到所需范围内的随机浮点数 X Y 请注意 X 是包含在内的 Y 是不包含的 具有下面列出的函数 因为Math random 和大多数伪随机数生成器 AFAIK 产生数字 0 1 function randomInRange
  • 从中国商店禁用Callkit 最佳方法?

    我们正在使用 CallKit 框架来促进 Voip 功能的本机使用 用户可以在我们的 Messenger 应用程序中进行语音和视频通话 但由于中国政府的原因 苹果公司从中国删除了 CallKit 应用程序 对于像我们这样的 CallKit
  • 如何根据任意条件函数过滤字典?

    我有一本要点词典 说 gt gt gt points a 3 4 b 1 2 c 5 5 d 3 3 我想创建一个新字典 其中包含 x 和 y 值小于 5 的所有点 即点 a b 和 d 根据the book http docs pytho
  • d3.js 4.2 选择中的第一个元素不绑定

    对于查看 d3 4 的人来说 这是一个简单的问题 https jsfiddle net dwrzso58 https jsfiddle net dwrzso58 d3 select body data 1 2 3 enter append
  • 复制 2 维矩阵以创建 3 维数组(在 R 中)

    我有一个二维矩阵 我想将其复制 10 次以创建一个三维数组 其中数组的每个 切片 都是二维数组的相同副本 所以 如果我的二维数组是 a lt matrix c 1 4 nrow 2 gt a 1 2 1 1 2 2 3 4 我想要一个像这样
  • 如何根据数据帧的 NAN 百分比删除列?

    对于某些列df 如果该列的 80 是NAN 删除此类列的最简单的代码是什么 您可以使用isnull http pandas pydata org pandas docs stable generated pandas DataFrame i