Python – 显示 Pandas 索引中不是 NA 的条目
在 Pandas 中,索引列常常起到关键的作用。但是,有时候数据中会出现缺失值(NA)的情况,那么我们如何找到不是 NA 的条目呢?本文将介绍几种实现方法,供大家参考。
方法一:通过“notna()”方法
Pandas 中提供了一个非常方便的方法,即“notna()”,用于输出索引中不是 NA 的条目。下面是示例代码:
import pandas as pd
# 创建数据帧
data = {'name': ['Alice', 'Bob', 'Cathy', 'David', 'Eva'],
'age': [20, 25, 30, 35, 40],
'gender': ['F', 'M', 'F', 'M', 'F'],
'salary': [3000, 4000, None, 5000, None]}
df = pd.DataFrame(data)
df = df.set_index('name') # 将 “name” 列设置为索引列
# 使用 notna() 方法
df_notna = df.loc[df['salary'].notna()]
# 输出结果
print(df_notna)
执行以上代码后,将会输出如下结果:
age gender salary
name
Alice 20 F 3000.0
Bob 25 M 4000.0
David 35 M 5000.0
可以看到,输出结果只保留了有工资的员工信息,缺失值被自动过滤掉了。
方法二:通过“dropna()”方法
除了上述提到的方法外,Pandas 中还提供了一个“dropna()”方法,该方法用于删除缺失值(NA)。由于我们只需要保留非缺失值,因此可以将此方法的 thresh 参数设置为 1。下面是示例代码:
import pandas as pd
# 创建数据帧
data = {'name': ['Alice', 'Bob', 'Cathy', 'David', 'Eva'],
'age': [20, 25, 30, 35, 40],
'gender': ['F', 'M', 'F', 'M', 'F'],
'salary': [3000, 4000, None, 5000, None]}
df = pd.DataFrame(data)
df = df.set_index('name') # 将 “name” 列设置为索引列
# 使用 dropna() 方法
df_dropna = df.dropna(thresh=1, axis=0)
# 输出结果
print(df_dropna)
执行以上代码后,将会输出如下结果:
age gender salary
name
Alice 20 F 3000.0
Bob 25 M 4000.0
Cathy 30 F NaN
David 35 M 5000.0
Eva 40 F NaN
可以看到,输出结果中所有的行都保留了至少一个非缺失值。
方法三:通过条件选择
除了使用上述提到的方法外,我们还可以通过条件选择实现。具体来说,我们可以通过布尔索引选择其中不是 NA 的行。下面是示例代码:
import pandas as pd
# 创建数据帧
data = {'name': ['Alice', 'Bob', 'Cathy', 'David', 'Eva'],
'age': [20, 25, 30, 35, 40],
'gender': ['F', 'M', 'F', 'M', 'F'],
'salary': [3000, 4000, None, 5000, None]}
df = pd.DataFrame(data)
df = df.set_index('name') # 将 “name” 列设置为索引列
# 使用条件选择
df_sel = df[df['salary'].notna()]
# 输出结果
print(df_sel)
执行以上代码后,将会输出如下结果:
age gender salary
name
Alice 20 F 3000.0
Bob 25 M 4000.可以看到,通过布尔索引选择了所有不是 NA 的行,与使用“notna()”方法的效果一致。
方法四:通过“fillna()”方法
在某些情况下,我们可能需要将缺失值转换为其它的值。在这种情况下,我们可以使用“fillna()”方法。下面是示例代码:
import pandas as pd
# 创建数据帧
data = {'name': ['Alice', 'Bob', 'Cathy', 'David', 'Eva'],
'age': [20, 25, 30, 35, 40],
'gender': ['F', 'M', 'F', 'M', 'F'],
'salary': [3000, 4000, None, 5000, None]}
df = pd.DataFrame(data)
df = df.set_index('name') # 将 “name” 列设置为索引列
# 使用 fillna() 方法
df_fillna = df.fillna({'salary': 0})
# 输出结果
print(df_fillna)
执行以上代码后,将会输出如下结果:
age gender salary
name
Alice 20 F 3000.0
Bob 25 M 4000.0
Cathy 30 F 0.0
David 35 M 5000.0
Eva 40 F 0.0
在上述代码中,我们将缺失值替换为了 0,输出结果中可以看到:Cathy 和 Eva 的工资都被替换为了 0。
结论
本文介绍了通过四种不同的方法实现 Pandas 索引中不是 NA 的条目的查找和处理。具体来说,我们可以通过“notna()”、“dropna()”、条件选择和“fillna()”方法来实现。这些方法各有优劣,大家可以根据不同的需求做出选择。