python - 当相关列中的值不为空时,如何编写一个函数来查找列中的值为空的所有行
问题描述
def check_correlated_column_values(df,column,dependent_column_list):
result = df.loc[(df[column].isnull()) & (pd.notnull(df[dependent_column_list[0]])) & (pd.notnull(df[dependent_column_list[1]])) & (pd.notnull(df[dependent_column_list[2]]))]
return (result)
这dependent_column_list
是动态的,可以针对特定列进行更改。
示例:一个数据框有 3 列,ManagerName、ManagerPhone 和 ManagerEmail,我想编写一个通用函数来查找 ManagerName 为空但 ManagerPhone 和 ManagerEmail 列值不为空的所有行。
在上述函数上下文中,column='ManagerName'
, dependent_column_list=['ManagerPhone', ManagerEmail']
. 仅当依赖列表中有 3 列时,上述函数才有效,希望使其通用,以便它可以处理该列表中的任意数量的动态更改。
谢谢!!!
解决方案
正如 Bruno Mello 回答的那样,您可以使用任何循环系统。
但是您可以使用函数any()
and来做到这一点all()
。
All()
- 如果可迭代对象的所有元素都为真(或可迭代对象为空),则返回 True。Python 文档
pd.notnull(df[dependent_column_list])
这将创建一个仅包含布尔数据的数据框。因此,您不必声明列。它使代码通用。
但要注意axis=1
括号内的内容。这将合成行,而不是列(默认)。
def check_correlated_column_values(df,column,dependent_column_list):
result = df.loc[(df[column].isnull()) & (pd.notnull(df[dependent_column_list]).all(axis=1))]
return (result)
推荐阅读
- java - 在Java中,我如何在几行中初始化数组中的元素,而不是一行?
- ibm-cloud - 如何从 cloudantdb 中删除重复项?
- angular - 使用 Angular 项目时,只要打开开发人员工具,Internet Explorer 11 就会崩溃
- ios - 有什么方法可以在 swift ios 应用程序中忘记 AzureAD MSAL 中的登录帐户?
- material-ui - Material-UI Typeography gutterbottom - 增加边距
- java - 在 Spring Boot 中未调用使用 Header 和 RequestBody 消费 POST 请求的方法
- ibm-mq - 基于内容的过滤-选择器字符串-IBM MQ
- java - Maven 在 Eclipse spring-boot-starter-parent 中找不到工件命令
- c# - 具有自动滚动功能的面板和大的内部面板。调整巨大。C#
- python - 难以为 Discord 构建 Stats Bot