栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

[Pandas技巧] 筛选DataFrame含有空值的数据行

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[Pandas技巧] 筛选DataFrame含有空值的数据行

美图欣赏2022/06/18

数据准备

import pandas as pd

df = pd.DataFrame([['ABC','Good',1],
                   ['FJZ',None,2],
                   ['FOC','Good',None]
                  ],columns=['Site','Remark','Quantity'])

df

注意:上述Remark字段中的数据类型为字符串str类型,空值取值为'None',Quantity字段中的数据类型为数值型,空值取值为nan 


1.筛选指定单列中有空值的数据行

# 语法
df[pd.isnull(df[col])]
df[df[col].isnull()] 
# 获取Remark字段为None的行
df_isnull_remark = df[df['Remark'].isnull()]
# 获取Quantity字段为None的行
df_isnull_quantity = df[df['Quantity'].isnull()]

df_isnull_remark

df_isnull_quantity

提示

筛选指定单列中没有空值的数据行

# 语法
df[pd.notnull(df[col])]
df[df[col].notnull()] 
# 获取Remark字段为非None的行
df_notnull_remark = df[df['Remark'].notnull()]
# 获取Quantity字段为非None的行
df_notnull_quantity = df[df['Quantity'].notnull()]

df_notnull_remark

df_notnull_quantity 

2.筛选指定多列中/全部列中满足所有列有空值的数据行 

# 语法
df[df[[cols]].isnull().all(axis=1)] 
df[pd.isnull(df[[cols]]).all(axis=1)]

在df基础上增加一行生成df1

df1 = pd.DataFrame([['ABC','Good',1],
                   ['FJZ',None,2],
                   ['FOC','Good',None],
                   [None,None,None]
                  ],columns=['Site','Remark','Quantity'])

# 获取df1所有列有空值的数据行 
all_df_isnull = df1[df1[['Site','Remark','Quantity']].isnull().all(axis=1)]

all_df_isnull

提示

筛选指定多列中/全部列中满足所有列没有空值的数据行 

# 语法
df[df[[cols]].notnull().all(axis=1)] 
df[pd.notnull(df[[cols]]).all(axis=1)]
# 获取df1所有列没有空值的数据行 
all_df_notnull = df1[df1[['Site','Remark','Quantity']].notnull().all(axis=1)]

all_df_notnull

3.筛选指定多列中/全部列中满足任意一列有空值的数据行 

# 语法
df[df[[cols]].isnull().any(axis=1)] 
df[pd.isnull(df[[cols]]).any(axis=1)]

df1(数据源)

# 获取df1所有列中满足任意一列有空值的数据行 
any_df_isnull = df1[df1[['Site','Remark','Quantity']].isnull().any(axis=1)] 

any_df_isnull

提示

筛选指定多列中/全部列中满足任意一列没有空值的数据行

# 语法
df[df[[cols]].notnull().any(axis=1)] 
df[pd.notnull(df[[cols]]).any(axis=1)]
# 获取df1所有列中满足任意一列没有空值的数据行 
any_df_notnull = df1[df1[['Site','Remark','Quantity']].notnull().any(axis=1)]

any_df_notnull


Numpy里边查找NaN值的话,使用np.isnan()

Pabdas里边查找NaN值的话,使用.isna()或.isnull()

import pandas as pd
import numpy as np

df = pd.DataFrame({'site1': ['a', 'b', 'c', ''],
                   'site2': ['a', np.nan, '', 'd'],
                   'site3': ['a', 'b', 'c', 'd']})

df

df['contact_site'] = df['site1'] + df['site2'] + df['site3']

新增数据列后的df 

res1 = df[df['site2'].isnull()]
res2 = df[df['site2'].isna()]
res3 = df[df['site2']=='']

res1

res2

res3

注意:res1和res2的结果相同,说明.isna()和.isnull()的作用等效

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/979639.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号