pandas是Python中重要的数据处理工具之一,它提供了许多数据分析功能。其中,“过滤”是pandas的重要功能之一。通过pandas的过滤功能,我们可以很容易地从数据集中过滤出需要的数据行或列。本文将介绍pandas过滤的各种技巧,以及如何使用pandas库进行数据处理。
一、pandas过滤数据
pandas过滤数据的方式有很多种,其中最常用的方式是使用布尔索引。布尔索引是基于某个条件对DataFrame对象进行真假判断,返回一个元素为True或False的索引数组。然后,我们使用这个索引数组来筛选出需要的数据。下面我们来看一个例子:
import pandas as pd # 创建数据集 df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e']}) # 进行过滤操作 df = df[df['A'] > 3] print(df)
上面的代码中,我们首先使用pandas创建了一个数据集,并且对A列进行了“过滤”操作。只有大于3的行才会被保留。我们可以使用以下代码进行验证:
# 输出过滤结果 print(df)
输出结果如下:
A B 3 4 d 4 5 e
我们可以看到,只有A列大于3的行被保留下来了。
二、pandas过滤两列相等
在pandas中,我们可以使用布尔索引来进行多列过滤。例如,我们想要保留A列和B列值相等的行,可以使用以下代码:
# 创建数据集 df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e']}) # 进行过滤操作 df = df[df['A'] == df['B']] print(df)
运行以上代码后得到以下结果:
A B 0 1 a
我们可以看到,只有A列和B列的值相等的行被保留了下来。
三、pandas过滤缺失
在实际的数据处理过程中,数据中可能有一些缺失值。在pandas中,我们可以使用isna()和notna()函数来判断一个元素是否为空。例如,我们想要找出B列中为空的行,可以使用以下代码:
# 创建数据集 df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', None, 'c', 'd', 'e']}) # 进行过滤操作 df = df[df['B'].isna()] print(df)
运行以上代码后得到以下结果:
A B 1 2 None
我们可以看到,只有B列为空的行被保留了下来。
四、pandas过滤行
在pandas中,我们可以使用iloc或loc函数来选择需要的行。iloc是根据行号和列号来选择数据的,在对应行号和列号的位置处取出数据;loc则是根据标签名来选择数据的。例如,我们想要取出第二行的数据,可以使用以下代码:
# 创建数据集 df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e']}) # 进行过滤操作 df = df.iloc[1, :] print(df)
运行以上代码后得到以下结果:
A 2 B b Name: 1, dtype: object
我们可以看到,只有第二行的数据被保留了下来。
五、pandas过滤多值
在pandas中,我们可以用isin()函数选择数据集中的多个值。例如,我们想要保留A列中等于1或等于3的行,可以使用以下代码:
# 创建数据集 df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e']}) # 进行过滤操作 df = df[df['A'].isin([1, 3])] print(df)
运行以上代码后得到以下结果:
A B 0 1 a 2 3 c
我们可以看到,只有A列等于1或等于3的行被保留了下来。
六、pandas过滤掉异常值
在数据分析中,我们经常需要过滤掉一些异常值。在pandas中,我们可以使用describe()函数来查看数据分布情况,并根据分析结果对数据进行过滤。例如,我们想要过滤掉A列中大于均值两倍标准差的行,可以使用以下代码:
# 创建数据集 df = pd.DataFrame({'A': [1, 2, 3, 4, 50], 'B': ['a', 'b', 'c', 'd', 'e']}) # 查看数据分布情况 print(df.describe()) # 进行过滤操作 df = df[df['A'] < df['A'].mean() + 2 * df['A'].std()] print(df)
运行以上代码后得到以下结果:
A count 5.000000 mean 12.000000 std 19.874607 min 1.000000 25% 2.000000 50% 3.000000 75% 4.000000 max 50.000000 A B 0 1 a 1 2 b 2 3 c 3 4 d
我们可以看到,A列中大于均值两倍标准差的行被过滤掉了。
七、pandas过滤字符串
在pandas中,我们可以使用str.contains()和str.startswith()函数来过滤包含特定字符串的行或者以特定字符串开头的行。例如,我们想要过滤出B列中包含字符“a”的行,可以使用以下代码:
# 创建数据集 df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'ad', 'e']}) # 进行过滤操作 df = df[df['B'].str.contains('a')] print(df)
运行以上代码后得到以下结果:
A B 0 1 a 3 4 ad
我们可以看到,只有B列包含字符“a”的行被保留了下来。
八、pandas过滤出所需要的行
在pandas中,我们可以使用query()函数来筛选出需要的行。query()函数可以接收一个表达式字符串,并根据该表达式字符串返回需要的行。例如,我们想要过滤出A列中等于1或等于3的行,可以使用以下代码:
# 创建数据集 df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e']}) # 进行过滤操作 df = df.query('A==1 | A==3') print(df)
运行以上代码后得到以下结果:
A B 0 1 a 2 3 c
我们可以看到,只有A列等于1或等于3的行被保留了下来。
九、pandas过滤值大于门限的数据行
在实际的数据分析中,我们经常需要对某列数据进行分析,然后筛选出那些不符合要求的数据行。例如,我们想要过滤掉A列中大于门限的数据行,可以使用以下代码:
# 创建数据集 df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e']}) # 进行过滤操作 thresh = 3 df = df[df['A'] <= thresh] print(df)
运行以上代码后得到以下结果:
A B 0 1 a 1 2 b 2 3 c
我们可以看到,只有A列中小于或等于门限的数据行被保留了下来。
十、pandas模糊查询选取
在pandas中,我们可以使用str.contains()来模糊查询选取数据。例如,我们想要选取B列中包含字母“a”的数据行,可以使用以下代码:
# 创建数据集 df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e']}) # 进行模糊查询 df = df[df['B'].str.contains('a')] print(df)
运行以上代码后得到以下结果:
A B 0 1 a
我们可以看到,只有B列中包含字母“a”的数据行被保留了下来。
结束语
本文介绍了10种pandas过滤数据的方法,包括使用布尔索引、多列过滤、缺失值过滤、使用iloc和loc函数选择行、使用isin()函数选择多个值、过滤掉异常值、使用str.contains()和str.startswith()函数过滤字符串、使用query()函数筛选出需要的行、过滤值大于门限的数据行、模糊查询选取数据。掌握这些技巧后,我们可以对数据进行快速的筛选和过滤操作,从而更加高效地进行数据分析。