dropna() 方法过滤任何含有缺失值的行
pandas.dataframe里,如果一行数据有任意值为空,则过滤掉整行,这时候使用dropna()方法是合适的。下面的案例,任意列只要有一个为空数据,则整行都干掉。但是我们常常遇到的情况,是根据一个指标(一列)数据的情况,去过滤行数据,类似excel里面的过滤漏斗,怎么办?
>>> import pandas as pd
>>> data = pd.dataframe([[1.,6.5,3.],[1.],[],[6.5,3.]],index=list('abcd'),columns=list('def'))
>>> data
d e f
a 1.0 6.5 3.0
b 1.0 nan nan
c nan nan nan
d 6.5 3.0 nan
>>> data.dropna() #任意列只要有一个为空数据,则整行都干掉
d e f
a 1.0 6.5 3.0dropna() 其他参数解析
我们引入了dropna()方法的其他参数。
dataframe.dropna(axis=0, how='any', thresh=none, subset=none, inplace=false)
参数说明:
axis:
- axis=0: 删除包含缺失值的行
- axis=1: 删除包含缺失值的列
how: 与axis配合使用
- how=‘any’ :只要有缺失值出现,就删除该行或列
- how=‘all’: 所有的值都缺失,才删除行或列
thresh: axis中至少有thresh个非缺失值,否则删除。比如 axis=0,thresh=10:标识如果该行中非缺失值的数量小于10,将删除改行
subset: list,在哪些列中查看是否有缺失值
inplace: 是否在原数据上操作。如果为真,返回none,否则返回新的copy,去掉了缺失值
>>> data.dropna(axis=0,subset=['e']) #axis=0,删除行,在subset的列中进行查看
d e f
a 1.0 6.5 3.0
d 6.5 3.0 nan方法二:替换并删除,python pandas 如果某列值为空,过滤删除所在行数据
如上面的data数据,如果希望“e”列数值为空nan时,删除对应行也就是“b、c”行数据,保留其他行,用dropna()似乎比较麻烦。 这个时候的思路是:
fillna()给空值填充一个数值(如999999)index.tolist()找出值为填充值所在行的索引drop根据索引干掉对应的行
>>> data['e']=data['e'].fillna(999999)
>>> find_index=data[(data.e==999999)].index.tolist()
>>> find_index
['b', 'c']
>>> data.drop(find_index)
d e f
a 1.0 6.5 3.0
d 6.5 3.0 nandrop()函数
在 pandas 中,删除指定的行或列最常用的方法是 drop() 函数。此外,还可以通过 del、pop、条件筛选等方式实现。下面分别介绍。
删除列
1. 使用 drop 删除列(推荐)
import pandas as pd
df = pd.dataframe({'a': [1,2,3], 'b': [4,5,6], 'c': [7,8,9]})
# 删除单列(不修改原 dataframe,返回新对象)
df_new = df.drop('b', axis=1)
# 删除多列
df_new = df.drop(['b', 'c'], axis=1)
# 直接修改原 dataframe(inplace=true)
df.drop('b', axis=1, inplace=true)2. 使用 columns 参数(更直观)
df.drop(columns=['b', 'c'], inplace=true)
3. 使用 del 语句
del df['b'] # 直接删除列,修改原 dataframe
4. 使用 pop 方法(会返回删除的列)
removed_col = df.pop('b') # 删除列并返回 series删除行
1. 按行索引标签删除
df = pd.dataframe({'a': [1,2,3], 'b': [4,5,6]}, index=['x', 'y', 'z'])
# 删除单行
df.drop('y', inplace=true)
# 删除多行
df.drop(['x', 'z'], inplace=true)2. 按位置删除(行号)
# 删除第 2 行(索引为 1) df.drop(df.index[1], inplace=true) # 删除前 2 行 df.drop(df.index[:2], inplace=true)
3. 按条件删除行(最常用)
df = pd.dataframe({'年龄': [18, 25, 30, 22], '分数': [85, 92, 78, 88]})
# 删除年龄大于 25 的行
df_filtered = df[df['年龄'] <= 25] # 保留条件为 true 的行
# 或者用 drop + 条件索引
df.drop(df[df['年龄'] > 25].index, inplace=true)删除含缺失值的行/列
1. 删除所有含 nan 的行
df.dropna() # 任何一行有 nan 就删除 df.dropna(how='all') # 仅当一行全为 nan 才删除 df.dropna(thresh=2) # 至少保留 2 个非 nan 值
2. 删除所有含 nan 的列
df.dropna(axis=1)
注意事项
inplace=true 会直接修改原 dataframe,否则返回新对象。
删除行/列时,如果指定的索引/列名不存在,会报错。可以添加 errors='ignore' 避免:
df.drop('不存在的列', axis=1, errors='ignore')条件删除更推荐使用布尔索引(df[条件]),而不是 drop,因为可读性更好。
到此这篇关于python pandas实现删除指定行/列数据的文章就介绍到这了,更多相关python pandas删除指定数据内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论