文章目录
- 1. 方法简介
- 2. 案例
- 3. 相关文章:
-
- (1) pandas分组聚合|agg|transform|apply
- (2) 缺省值判断 pd.isnull, pd.isna, pd.notna, pd.notnull, np.isnan, math.isnan 区别
- (3) pandas中DataFrame字典互转
- (4) pandas.concat实现DataFrame竖着拼接、横着拼接
- (5) pandas|找出某列最大值的所在的行
- (6) DataFrame——指定位置增加删除一行一列
- (7) AttributeError: module ‘pandas‘ has no attribute ‘isna‘
- (8) pandas–Series.str–字符串处理
- (9) list、ndarry、Series、DataFrame的创建、索引和选取
- (10) Series和DataFrame复合索引的创建和取值
- (11) pd.notnull
- (12) Pandas|DataFrame| 处理DataFrame中的inf值
- (13) 由字典dictionary或列表list创建dataframe
- (14) pandas|DataFrame排序及分组排序
- (15) Pandas|DataFrame| DataFrame中的nan值处理
1. 方法简介
1.1 DataFrame.dropna()
DataFrame.dropna()方法的作用:是删除含用空值或缺失值得行或列。
语法为:dropna(axis=0,how=‘any’,thresh=None,subset=None,inplace=False)
参数:
- axis:确定过滤的行或列,取值可以为
(1) 0或index:删除包含缺失值的行,默认为0。
(2) 1或columns:删除包含缺失值的列。 - how:确定过滤的标准,取值可以为:
(1)any:默认值,如果存在NaN值,就删除该行或该列。//有一个就删除行或列
(2)all:如果所有值都是NaN值,就删除该行或该列。 //全部都是才删除行或列 - thresh:表示有效数据量的最小要求,比如thresh=3,要求该行或该列至少有三个不是NaN值时将其保留。
- subset:表示在特定的字集中寻找NaN值
- inplace:表示是否在原数据上操作,如果设为True,则表示直接修改原数据;如果设为False,则表示修改原数据的副本,返回新数据
1.2 .DataFrame.fillna()
语法为:fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
参数:
- value:用于填充的空值的值。
- method: {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None。定义了填充空值的方法, pad / ffill表示用前面行/列的值,填充当前行/列的空值, backfill / bfill表示用后面行/列的值,填充当前行/列的空值。
- axis:轴。0或’index’,表示按行删除;1或’columns’,表示按列删除。
- inplace:是否原地替换。布尔值,默认为False。如果为True,则在原DataFrame上进行操作,返回值为None。
- limit:int, default None。如果method被指定,对于连续的空值,这段连续区域,最多填充前 limit 个空值(如果存在多段连续区域,每段最多填充前 limit 个空值)。如果method未被指定, 在该axis下,最多填充前 limit 个空值(不论空值连续区间是否间断)
- downcast:dict, default is None,字典中的项为,为类型向下转换规则。或者为字符串“infer”,此时会在合适的等价类型之间进行向下转换,比如float64 to int64 if possible。
2. 案例
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(32).reshape(8, 4), columns=list("abcd"))
df.loc[1, 'a'] = 2
df.loc[1, 'c'] = 2.0
df.loc[6, 'c'] = np.nan
df.loc[3, 'c'] = 10
df.loc[3, ['c', 'd']] = np.nan
df["year"] = '2023'
df["date"] = ['08-25','08-26','08-27','08-28','08-29','08-30','08-31','09-01']
# 合并数据
df["ydate"] =df["year"].map(str) +"-"+ df["date"].map(str)
df["高温"] = ['15°', '16°', '20°', '19°', '20°', '22°', '24°', '23°']
df["低温"] = ['10°', '11°', '18°', '17°', '10°', '18°', '20°', '17°']
df["空气质量"] = ['优', '良', '优', '优', '差', '良', '优', np.nan]
print(df)
a b c d year date ydate 高温 低温 空气质量
0 0 1 2.0 3.0 2023 08-25 2023-08-25 15° 10° 优
1 2 5 2.0 7.0 2023 08-26 2023-08-26 16° 11° 良
2 8 9 10.0 11.0 2023 08-27 2023-08-27 20° 18° 优
3 12 13 NaN NaN 2023 08-28 2023-08-28 19° 17° 优
4 16 17 18.0 19.0 2023 08-29 2023-08-29 20° 10° 差
5 20 21 22.0 23.0 2023 08-30 2023-08-30 22° 18° 良
6 24 25 NaN 27.0 2023 08-31 2023-08-31 24° 20° 优
7 28 29 30.0 31.0 2023 09-01 2023-09-01 23° 17° NaN
2.1 删除全部为NaN的行
df1 = df.copy()
df1.loc[8, :] = np.nan
df1
a b c d year date ydate 高温 低温 空气质量
0 0.0 1.0 2.0 3.0 2023 08-25 2023-08-25 15° 10° 优
1 2.0 5.0 2.0 7.0 2023 08-26 2023-08-26 16° 11° 良
2 8.0 9.0 10.0 11.0 2023 08-27 2023-08-27 20° 18° 优
3 12.0 13.0 NaN NaN 2023 08-28 2023-08-28 19° 17° 优
4 16.0 17.0 18.0 19.0 2023 08-29 2023-08-29 20° 10° 差
5 20.0 21.0 22.0 23.0 2023 08-30 2023-08-30 22° 18° 良
6 24.0 25.0 NaN 27.0 2023 08-31 2023-08-31 24° 20° 优
7 28.0 29.0 30.0 31.0 2023 09-01 2023-09-01 23° 17° NaN
8 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
df1 = df.dropna(axis=0, how='all')
df1
a | b | c | d | year | date | ydate | 高温 | 低温 | 空气质量 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0.0 | 1.0 | 2.0 | 3.0 | 2023 | 08-25 | 2023-08-25 | 15° | 10° | 优 |
1 | 2.0 | 5.0 | 2.0 | 7.0 | 2023 | 08-26 | 2023-08-26 | 16° | 11° | 良 |
2 | 8.0 | 9.0 | 10.0 | 11.0 | 2023 | 08-27 | 2023-08-27 | 20° | 18° | 优 |
3 | 12.0 | 13.0 | NaN | NaN | 2023 | 08-28 | 2023-08-28 | 19° | 17° | 优 |
4 | 16.0 | 17.0 | 18.0 | 19.0 | 2023 | 08-29 | 2023-08-29 | 20° | 10° | 差 |
5 | 20.0 | 21.0 | 22.0 | 23.0 | 2023 | 08-30 | 2023-08-30 | 22° | 18° | 良 |
6 | 24.0 | 25.0 | NaN | 27.0 | 2023 | 08-31 | 2023-08-31 | 24° | 20° | 优 |
7 | 28.0 | 29.0 | 30.0 | 31.0 | 2023 | 09-01 | 2023-09-01 | 23° | 17° | NaN |
2.2 删除包含NaN的行
df2 = df.dropna(axis=0, how='any')
df2
a | b | c | d | year | date | ydate | 高温 | 低温 | 空气质量 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0.0 | 1.0 | 2.0 | 3.0 | 2023 | 08-25 | 2023-08-25 | 15° | 10° | 优 |
1 | 2.0 | 5.0 | 2.0 | 7.0 | 2023 | 08-26 | 2023-08-26 | 16° | 11° | 良 |
2 | 8.0 | 9.0 | 10.0 | 11.0 | 2023 | 08-27 | 2023-08-27 | 20° | 18° | 优 |
4 | 16.0 | 17.0 | 18.0 | 19.0 | 2023 | 08-29 | 2023-08-29 | 20° | 10° | 差 |
5 | 20.0 | 21.0 | 22.0 | 23.0 | 2023 | 08-30 | 2023-08-30 | 22° | 18° | 良 |
2.3 删除包含NaN的列
df3 = df.dropna(axis=1, how='any')
df3
a | b | year | date | ydate | 高温 | 低温 | |
---|---|---|---|---|---|---|---|
0 | 0 | 1 | 2023 | 08-25 | 2023-08-25 | 15° | 10° |
1 | 2 | 5 | 2023 | 08-26 | 2023-08-26 | 16° | 11° |
2 | 8 | 9 | 2023 | 08-27 | 2023-08-27 | 20° | 18° |
3 | 12 | 13 | 2023 | 08-28 | 2023-08-28 | 19° | 17° |
4 | 16 | 17 | 2023 | 08-29 | 2023-08-29 | 20° | 10° |
5 | 20 | 21 | 2023 | 08-30 | 2023-08-30 | 22° | 18° |
6 | 24 | 25 | 2023 | 08-31 | 2023-08-31 | 24° | 20° |
7 | 28 | 29 | 2023 | 09-01 | 2023-09-01 | 23° | 17° |
2.4 删除全部为NaN的列
df4 = df.copy()
df4["unknow"] = np.nan
df4
a | b | c | d | year | date | ydate | 高温 | 低温 | 空气质量 | unknow | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1 | 2.0 | 3.0 | 2023 | 08-25 | 2023-08-25 | 15° | 10° | 优 | NaN |
1 | 2 | 5 | 2.0 | 7.0 | 2023 | 08-26 | 2023-08-26 | 16° | 11° | 良 | NaN |
2 | 8 | 9 | 10.0 | 11.0 | 2023 | 08-27 | 2023-08-27 | 20° | 18° | 优 | NaN |
3 | 12 | 13 | NaN | NaN | 2023 | 08-28 | 2023-08-28 | 19° | 17° | 优 | NaN |
4 | 16 | 17 | 18.0 | 19.0 | 2023 | 08-29 | 2023-08-29 | 20° | 10° | 差 | NaN |
5 | 20 | 21 | 22.0 | 23.0 | 2023 | 08-30 | 2023-08-30 | 22° | 18° | 良 | NaN |
6 | 24 | 25 | NaN | 27.0 | 2023 | 08-31 | 2023-08-31 | 24° | 20° | 优 | NaN |
7 | 28 | 29 | 30.0 | 31.0 | 2023 | 09-01 | 2023-09-01 | 23° | 17° | NaN | NaN |
df4 = df4.dropna(axis=1, how='all')
df4
a | b | c | d | year | date | ydate | 高温 | 低温 | 空气质量 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1 | 2.0 | 3.0 | 2023 | 08-25 | 2023-08-25 | 15° | 10° | 优 |
1 | 2 | 5 | 2.0 | 7.0 | 2023 | 08-26 | 2023-08-26 | 16° | 11° | 良 |
2 | 8 | 9 | 10.0 | 11.0 | 2023 | 08-27 | 2023-08-27 | 20° | 18° | 优 |
3 | 12 | 13 | NaN | NaN | 2023 | 08-28 | 2023-08-28 | 19° | 17° | 优 |
4 | 16 | 17 | 18.0 | 19.0 | 2023 | 08-29 | 2023-08-29 | 20° | 10° | 差 |
5 | 20 | 21 | 22.0 | 23.0 | 2023 | 08-30 | 2023-08-30 | 22° | 18° | 良 |
6 | 24 | 25 | NaN | 27.0 | 2023 | 08-31 | 2023-08-31 | 24° | 20° | 优 |
7 | 28 | 29 | 30.0 | 31.0 | 2023 | 09-01 | 2023-09-01 | 23° | 17° | NaN |
2.5 删除指定列是NaN的行
删除指定某一列有nan,这样即可定位到所在行的index,然后对该index进行drop操作即可
df[np.isnan(df['c'])].index #定位某一列是否有nan
输出:
Index([3, 6], dtype='int64')
# 直接drop对应indx即可删除该行
df5 = df.drop(df[np.isnan(df['c'])].index)
df5
a | b | c | d | year | date | ydate | 高温 | 低温 | 空气质量 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1 | 2.0 | 3.0 | 2023 | 08-25 | 2023-08-25 | 15° | 10° | 优 |
1 | 2 | 5 | 2.0 | 7.0 | 2023 | 08-26 | 2023-08-26 | 16° | 11° | 良 |
2 | 8 | 9 | 10.0 | 11.0 | 2023 | 08-27 | 2023-08-27 | 20° | 18° | 优 |
4 | 16 | 17 | 18.0 | 19.0 | 2023 | 08-29 | 2023-08-29 | 20° | 10° | 差 |
5 | 20 | 21 | 22.0 | 23.0 | 2023 | 08-30 | 2023-08-30 | 22° | 18° | 良 |
7 | 28 | 29 | 30.0 | 31.0 | 2023 | 09-01 | 2023-09-01 | 23° | 17° | NaN |
2.6 删除指定的两列都是空的行
df6 = df.dropna(axis=0, how='all', subset=['c', 'd'])
df6
a | b | c | d | year | date | ydate | 高温 | 低温 | 空气质量 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1 | 2.0 | 3.0 | 2023 | 08-25 | 2023-08-25 | 15° | 10° | 优 |
1 | 2 | 5 | 2.0 | 7.0 | 2023 | 08-26 | 2023-08-26 | 16° | 11° | 良 |
2 | 8 | 9 | 10.0 | 11.0 | 2023 | 08-27 | 2023-08-27 | 20° | 18° | 优 |
4 | 16 | 17 | 18.0 | 19.0 | 2023 | 08-29 | 2023-08-29 | 20° | 10° | 差 |
5 | 20 | 21 | 22.0 | 23.0 | 2023 | 08-30 | 2023-08-30 | 22° | 18° | 良 |
6 | 24 | 25 | NaN | 27.0 | 2023 | 08-31 | 2023-08-31 | 24° | 20° | 优 |
7 | 28 | 29 | 30.0 | 31.0 | 2023 | 09-01 | 2023-09-01 | 23° | 17° | NaN |
2.7 筛选出NaN的数据
df_nan = df[df['d'].isna()]
df_nan
a | b | c | d | year | date | ydate | 高温 | 低温 | 空气质量 | |
---|---|---|---|---|---|---|---|---|---|---|
3 | 12 | 13 | NaN | NaN | 2023 | 08-28 | 2023-08-28 | 19° | 17° | 优 |
2.8 筛选出非NaN的数据
df_notnan = df[~df['d'].isna()]
df_notnan
a | b | c | d | year | date | ydate | 高温 | 低温 | 空气质量 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1 | 2.0 | 3.0 | 2023 | 08-25 | 2023-08-25 | 15° | 10° | 优 |
1 | 2 | 5 | 2.0 | 7.0 | 2023 | 08-26 | 2023-08-26 | 16° | 11° | 良 |
2 | 8 | 9 | 10.0 | 11.0 | 2023 | 08-27 | 2023-08-27 | 20° | 18° | 优 |
4 | 16 | 17 | 18.0 | 19.0 | 2023 | 08-29 | 2023-08-29 | 20° | 10° | 差 |
5 | 20 | 21 | 22.0 | 23.0 | 2023 | 08-30 | 2023-08-30 | 22° | 18° | 良 |
6 | 24 | 25 | NaN | 27.0 | 2023 | 08-31 | 2023-08-31 | 24° | 20° | 优 |
7 | 28 | 29 | 30.0 | 31.0 | 2023 | 09-01 | 2023-09-01 | 23° | 17° | NaN |
2.9 替换NaN值
df9 = df.fillna('') # 将nan替换为''
df9
a | b | c | d | year | date | ydate | 高温 | 低温 | 空气质量 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1 | 2.0 | 3.0 | 2023 | 08-25 | 2023-08-25 | 15° | 10° | 优 |
1 | 2 | 5 | 2.0 | 7.0 | 2023 | 08-26 | 2023-08-26 | 16° | 11° | 良 |
2 | 8 | 9 | 10.0 | 11.0 | 2023 | 08-27 | 2023-08-27 | 20° | 18° | 优 |
3 | 12 | 13 | 2023 | 08-28 | 2023-08-28 | 19° | 17° | 优 | ||
4 | 16 | 17 | 18.0 | 19.0 | 2023 | 08-29 | 2023-08-29 | 20° | 10° | 差 |
5 | 20 | 21 | 22.0 | 23.0 | 2023 | 08-30 | 2023-08-30 | 22° | 18° | 良 |
6 | 24 | 25 | 27.0 | 2023 | 08-31 | 2023-08-31 | 24° | 20° | 优 | |
7 | 28 | 29 | 30.0 | 31.0 | 2023 | 09-01 | 2023-09-01 | 23° | 17° |
2.10 多条件筛选
nan_df = df[(df['高温'].str.len() <= 2) | (df['空气质量'].isna())]
nan_df
a | b | c | d | year | date | ydate | 高温 | 低温 | 空气质量 | |
---|---|---|---|---|---|---|---|---|---|---|
7 | 28 | 29 | 30.0 | 31.0 | 2023 | 09-01 | 2023-09-01 | 23° | 17° | NaN |
3. 相关文章:
(1) pandas分组聚合|agg|transform|apply
pandas分组聚合|agg|transform|apply
(2) 缺省值判断 pd.isnull, pd.isna, pd.notna, pd.notnull, np.isnan, math.isnan 区别
缺省值判断 pd.isnull, pd.isna, pd.notna, pd.notnull, np.isnan, math.isnan 区别
(3) pandas中DataFrame字典互转
(4) pandas.concat实现DataFrame竖着拼接、横着拼接
pandas.concat实现DataFrame竖着拼接、横着拼接
(5) pandas|找出某列最大值的所在的行
(6) DataFrame——指定位置增加删除一行一列
(7) AttributeError: module ‘pandas‘ has no attribute ‘isna‘
AttributeError: module ‘pandas‘ has no attribute ‘isna‘
(8) pandas–Series.str–字符串处理
(9) list、ndarry、Series、DataFrame的创建、索引和选取
list、ndarry、Series、DataFrame的创建、索引和选取
(10) Series和DataFrame复合索引的创建和取值
(11) pd.notnull
(12) Pandas|DataFrame| 处理DataFrame中的inf值
Pandas|DataFrame| 处理DataFrame中的inf值
(13) 由字典dictionary或列表list创建dataframe
由字典dictionary或列表list创建dataframe
(14) pandas|DataFrame排序及分组排序
(15) Pandas|DataFrame| DataFrame中的nan值处理
Pandas|DataFrame| DataFrame中的nan值处理
原文地址:https://blog.csdn.net/craftsman2020/article/details/132606714
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_23668.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!