【pandas小技巧】删除某列中包含nan的数据

本文介绍了如何使用pandas的dropna()函数来删除DataFrame中包含NaN的行和列。通过设置不同参数,可以实现按行删除、按列删除、指定条件删除等操作,例如删除所有包含NaN的行、删除所有包含NaN的列、删除全为NaN的列、保留至少有4个非NaN值的列以及按特定列删除包含NaN的行。此外,还解释了NaN不等于NaN的特性及其原因。
摘要由CSDN通过智能技术生成

删除某列中包含nan的数据

最近用pandas比较频繁,需要删除指定的某列中有nan的整个行数据

爬虫爬下来的数据,有时候会有缺失,所以需要删除掉这种空数据,wps里面是挺好筛选的
在这里插入图片描述


一开始的思路是通过loc确定是 nan的行

company_data = company_data.loc[lambda x: company_data['industry'] == np.nan]

发现这样根本筛不出来

import pandas as pd
import numpy as numpy

print(np.nan == np.nan)
// False

print(np.nan is np.nan)
// True

这个是个什么神奇等式,暂时没搞明白

发现loc用起来比较费劲
下面介绍下dropna

pandas里面的dropna

官网地址:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.dropna.html?highlight=dropna#pandas.DataFrame.dropna

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
参数:
axis: {0 or ‘index’, 1 or ‘columns’}, default 0
确定是否删除了包含缺失值的行或列。

0 或index:删除包含缺失值的行。

1或columns:删除包含缺失值的列。

how: {‘any’, ‘all’}, default ‘any’
当我们至少有一个 NA 或全部 NA 时,确定是否从 DataFrame 中删除行或列。

any:如果存在任何 NA 值,则删除该行或列。

all:如果所有值都是 NA,则删除该行或列。

thresh: int, optional
需要许多非 NA 值。(保留含有int个非nan值的行)

subset: column label or sequence of labels, optional
沿其他轴考虑的标签,例如 如果您要删除行,这些将是要包含的列列表。(删除特定列中包含缺失值的行或列)

inplace:默认False,即筛选后的数据存为副本,True表示直接在原数据上更改

数据示例:

import pandas as pd
df = pd.DataFrame(np.arange(24).reshape(4,6), index=['a', 'c', 'e', 'f'])
df.iloc[0,[1,2,5]]=np.nan
df.iloc[2,[1,4]]=np.nan

数据展示

df
    0     1     2   3     4     5
a   0   NaN   NaN   3   4.0   NaN
c   6   7.0   8.0   9  10.0  11.0
e  12   NaN  14.0  15   NaN  17.0
f  18  19.0  20.0  21  22.0  23.0
1. 删除所有包含NaN的行,相当于参数全部默认
a = df.dropna()
a
    0     1     2   3     4     5
c   6   7.0   8.0   9  10.0  11.0
f  18  19.0  20.0  21  22.0  23.0
2. 删除所有包含NaN的列
a = df.dropna(axis=1)
a
    0   3
a   0   3
c   6   9
e  12  15
f  18  21
3. 删除一整列都是NaN的列

增加一列nan数据

df.iloc[:,1]=np.nan
df
    0   1     2   3     4     5
a   0 NaN   NaN   3   4.0   NaN
c   6 NaN   8.0   9  10.0  11.0
e  12 NaN  14.0  15   NaN  17.0
f  18 NaN  20.0  21  22.0  23.0

数据删除操作

df=df.dropna(axis=1,how='all')
df
    0     2   3     4     5
a   0   NaN   3   4.0   NaN
c   6   8.0   9  10.0  11.0
e  12  14.0  15   NaN  17.0
f  18  20.0  21  22.0  23.0
4. 保留至少有4个非nan值的列
a = df.dropna(axis=1, thresh=4)
a
    0   3
a   0   3
c   6   9
e  12  15
f  18  21
5.删除列索引0,2中包含nan的行,字符串要加引号
a =df.dropna(subset=[0, 2]) 
a
    0     2   3     4     5
c   6   8.0   9  10.0  11.0
e  12  14.0  15   NaN  17.0
f  18  20.0  21  22.0  23.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值