pandas isin

pandas isin

pandas isin

介绍

在数据处理的过程中,我们经常需要根据指定的条件来筛选数据。在实际应用中,我们可能需要从一个大的数据集中提取符合某些条件的数据,或者根据一组指定的值来过滤数据。在这种情况下,isin方法可以帮助我们更快速、更方便地实现这些操作。

isin方法是pandas库的一个非常实用的函数,它可以用来检查一个数组或者DataFrame对象中的值是否在另一个数组或者序列中,并返回一个布尔值序列或者一个新的DataFrame对象。使用isin方法可以使得数据筛选的代码更加简洁和易读。

本文将详细介绍pandas库中的isin方法的用法,并通过示例代码来展示其在实践中的应用。

基本用法

检查单个列中的值是否在指定的序列中

首先,我们来看一个最基本的用法。假设我们有一个包含多个国家的数据集,我们想要筛选出其中一部分特定的国家。我们可以使用isin方法来实现这个功能。

首先,我们需要导入pandas库,并创建一个包含国家数据的DataFrame对象。

import pandas as pd

data = {'Country': ['China', 'United States', 'India', 'Japan', 'Germany'],
        'Population': [1444216107, 331002651, 1380004385, 126476461, 83783942]}

df = pd.DataFrame(data)
print(df)

运行以上代码,我们可以得到以下输出:

         Country  Population
0          China  1444216107
1  United States   331002651
2          India  1380004385
3          Japan   126476461
4        Germany    83783942

接下来,我们使用isin方法来筛选出我们感兴趣的国家,比如中国和印度。

countries_of_interest = ['China', 'India']
filtered_df = df[df['Country'].isin(countries_of_interest)]
print(filtered_df)

运行以上代码,我们可以得到以下输出:

  Country  Population
0   China  1444216107
2   India  1380004385

通过df['Country'].isin(countries_of_interest)这一行代码,我们可以判断每个国家是否在countries_of_interest序列中,生成一个布尔值序列。True表示在序列中,False表示不在序列中。然后,我们可以使用这个布尔值序列来筛选出相应的行。

检查多个列的多个值是否在指定的序列中

除了检查单个列的值,isin方法还可以用于多个列的值。我们可以传递一个字典给isin方法,字典的键是列名,键的值是我们感兴趣的值。

下面的示例代码演示了如何使用isin方法来筛选出多个列的多个值。

data = {'Country': ['China', 'United States', 'India', 'Japan', 'Germany'],
        'Continent': ['Asia', 'North America', 'Asia', 'Asia', 'Europe'],
        'Population': [1444216107, 331002651, 1380004385, 1, 83783942]}

df = pd.DataFrame(data)
print(df)

运行以上代码,我们可以得到以下输出:

         Country      Continent  Population
0          China           Asia  1444216107
1  United States  North America   331002651
2          India           Asia  1380004385
3          Japan           Asia           1
4        Germany         Europe    83783942

我们想要筛选出亚洲国家的数据,可以使用以下代码:

countries_of_interest = {'Country': ['China', 'India'], 'Continent': ['Asia']}
filtered_df = df[df.isin(countries_of_interest)]
print(filtered_df)

运行以上代码,我们可以得到以下输出:

  Country Continent  Population
0   China      Asia  1444216107
1     NaN       NaN         NaN
2   India      Asia  1380004385
3     NaN       NaN         NaN
4     NaN       NaN         NaN

在新的DataFrame对象中,只有符合我们指定的条件的列会被保留下来,其他列的值则被替换为NaN

使用~反转isin方法的结果

isin方法返回了一个布尔值序列或者一个新的DataFrame对象,其中True表示值在指定的序列中,False表示值不在序列中。如果我们想要选取不在指定序列中的值,可以使用tilda (~)将筛选条件取反。

以下是一个示例代码:

data = {'Country': ['China', 'United States', 'India', 'Japan', 'Germany'],
        'Continent': ['Asia', 'North America', 'Asia', 'Asia', 'Europe'],
        'Population': [1444216107, 331002651, 1380004385, 1, 83783942]}

df = pd.DataFrame(data)
print(df)

运行以上代码,我们可以得到以下输出:

         Country      Continent  Population
0          China           Asia  1444216107
1  United States  North America   331002651
2          India           Asia  1380004385
3          Japan           Asia           1
4        Germany         Europe    83783942

我们想要筛选出不属于亚洲的国家的数据,可以使用以下代码:

countries_of_interest = {'Country': ['China', 'India'], 'Continent': ['Asia']}
filtered_df = df[~df.isin(countries_of_interest)]
print(filtered_df)

运行以上代码,我们可以得到以下输出:

         Country      Continent  Population
0          China            NaN         NaN
1  United States  North America   331002651
2            NaN            NaN         NaN
3          Japan            NaN         NaN
4        Germany         Europe    83783942

通过在df前面加上tilda (~)运算符,我们实现了取反的操作,即选取不在指定序列中的值。

使用|&组合多个isin条件

isin方法还支持使用|&运算符来组合多个条件,用于更复杂的数据筛选。

以下是一个示例代码:

data = {'Country': ['China', 'United States', 'India', 'Japan', 'Germany'],
        'Continent': ['Asia', 'North America', 'Asia', 'Asia', 'Europe'],
        'Population': [1444216107, 331002651, 1380004385, 1, 83783942]}

df = pd.DataFrame(data)
print(df)

运行以上代码,我们可以得到以下输出:

         Country      Continent  Population
0          China           Asia  1444216107
1  United States  North America   331002651
2          India           Asia  1380004385
3          Japan           Asia           1
4        Germany         Europe    83783942

现在,我们想要筛选出亚洲的国家以及人口超过1亿的国家。我们可以使用以下代码:

filtered_df = df[df['Continent'].isin(['Asia']) & (df['Population'] > 100000000)]
print(filtered_df)

运行以上代码,我们可以得到以下输出:

  Country Continent  Population
0   China      Asia  1444216107
2   India      Asia  1380004385

通过使用&运算符,我们可以将两个条件进行组合,并将满足条件的行筛选出来。在这个示例中,我们用df['Continent'].isin(['Asia'])来筛选出亚洲的国家,然后再通过(df['Population'] > 100000000)筛选出人口超过1亿的国家。最终,我们得到了亚洲国家中人口超过1亿的国家。

使用np.nan表示缺失数据

在刚才的示例中,我们可以看到在筛选结果中存在一些值为NaN的情况。这是因为我们使用isin方法筛选时,未在指定的序列中的值会被替换为NaN

pandas中,NaN表示缺失数据。当筛选条件不满足时,DataFrame对象中相应的值会变为NaN。我们可以使用notna()方法来检查数据是否不为NaN

以下是一个示例代码:

data = {'Country': ['China', 'United States', 'India', 'Japan', 'Germany'],
        'Continent': ['Asia', 'North America', 'Asia', 'Asia', 'Europe'],
        'Population': [1444216107, 331002651, 1380004385, np.nan, 83783942]}

df = pd.DataFrame(data)
print(df)

运行以上代码,我们可以得到以下输出:

         Country      Continent    Population
0          China           Asia  1.444216e+09
1  United States  North America  3.310027e+08
2          India           Asia  1.380004e+09
3          Japan           Asia           NaN
4        Germany         Europe  8.378394e+07

我们可以使用notna()方法来检查Population列中是否存在缺失数据:

filtered_df = df[df['Population'].notna()]
print(filtered_df)

运行以上代码,我们可以得到以下输出:

         Country      Continent    Population
0          China           Asia  1.444216e+09
1  United States  North America  3.310027e+08
2          India           Asia  1.380004e+09
4        Germany         Europe  8.378394e+07

通过使用notna()方法,我们筛选出了不包含缺失数据的行。

总结

isin方法是pandas库中一个非常实用的函数,可以用于快速、方便地筛选数据。我们可以使用isin方法来检查一个数组或者DataFrame对象中的值是否在另一个数组或者序列中,并返回一个布尔值序列或者一个新的DataFrame对象。

在本文中,我们详细介绍了isin方法的基本用法,包括检查单个列中的值是否在指定的序列中、检查多个列的多个值是否在指定的序列中、使用~反转isin方法的结果以及使用|&组合多个isin条件。我们还介绍了如何处理缺失数据。

使用isin方法可以大大简化数据筛选的代码,使得我们能够更加高效地处理数据。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程