关键词

Python3.5 Pandas模块缺失值处理和层次索引实例详解

Python3.5 Pandas模块缺失值处理和层次索引实例详解

1. 缺失值处理

在数据分析中,经常会遇到数据缺失的情况,面对缺失数据,需要进行相应的处理以保证数据的完整性和准确性。 Pandas 模块提供了很多有用的方法来处理缺失数据。下面我们就来看一下 Pandas 模块缺失值处理的实例。

(1)创建带有缺失值的 DataFrame

我们可以通过 numpy 模块来创建随机的 DataFrame,随机产生的 DataFrame 中含有缺失值。

import numpy as np
import pandas as pd

np.random.seed(0)
df = pd.DataFrame(np.random.randn(5,5), columns=list('ABCDE'))
df.iloc[0,0] = np.nan
df.iloc[3,2] = np.nan
df.iloc[4,3] = np.nan

执行上述代码后可以得到带有缺失值的 DataFrame,其中包含 NaN 值。

(2)缺失值判断

在处理数据缺失时,我们需要先做缺失值的判断。 Pandas 模块提供了很多方法用于判断缺失值,如:isna()isnull() 方法。这两个方法都可以用于检查 DataFrame 或 Series 对象中的缺失值。

print(df.isna())

执行上方代码后会按照 DataFrame 中元素的位置展示 True 或 False值, True 表示该位置元素是 NaN 值, False 表示该位置元素有值。

(3)缺失值处理

缺失值处理的方法包括删除缺失值和填充缺失值。下面我们分别介绍这两种方法。

a. 删除缺失值

删除缺失值的方法包括删除含有缺失值的行和删除含有缺失值的列。

# 删除行
print(df.dropna(axis=0))

# 删除列
print(df.dropna(axis=1))

在执行上述代码后,可以看到分别删除行和列的结果。

b. 填充缺失值

填充缺失值的方法包括填充为固定值、向前填充和向后填充。填充为固定值,我们可以通过 fillna() 方法来实现。

# 填充为固定值
print(df.fillna(0))

在上述代码中,缺失值被填充为了 0。

向前填充或向后填充需要同时进行指定索引,我们通过 ffill()bfill() 方法来实现向前填充和向后填充。

# 向前填充
print(df.ffill())

# 向后填充
print(df.bfill())

执行上述代码可以得到向前填充和向后填充的结果。

2. 层次索引实例

在 Pandas 模块中,层次索引是一种非常强大的工具。层次索引允许我们在一个轴向上拥有多个索引级别,这样我们就可以在一个 DataFrame 对象上存储更加复杂的数据结构。下面我们就来看一下 Pandas 模块层次索引的实例。

(1)创建带有层次索引的 DataFrame

data = pd.DataFrame(np.random.randn(6,4),index=[list('AAABBB'), list('XYXYXY')],
                   columns=[['Data1', 'Data1', 'Data2', 'Data2'], ['VarA', 'VarB', 'VarC', 'VarD']])

执行上述代码之后,我们可以看到已经创建了一个带有层次索引的 DataFrame。

(2) 选取数据

在层次索引中,我们可以通过 loc 方法来进行数据的选取。

# 第一层索引为 A 的所有数据
print(data.loc['A'])

# 第一层索引为 A ,第二层索引为 X 的数据
print(data.loc['A', 'X'])

# 第二层索引为 VarA 的所有数据
print(data.loc[:, 'VarA'])

在执行上述代码之后,我们可以通过不同的参数来选取不同层的数据。

(3) 层次索引排序

层次索引在使用时通常需要排序,Pandas 模块中提供了 sort_index() 方法来对 DataFrame 进行排序。

# 对第一层索引排序
print(data.sort_index(level=0))

# 对第二层索引排序
print(data.sort_index(level=1))

在执行上述代码后,我们可以看到经过排序后的 DataFrame。

(4) 重命名索引

在层次索引中,我们可以通过 rename() 方法重新命名索引。例如,我们重新命名第一层索引为 X,第二层索引为 Y。

data.rename(index={'A':'X', 'B':'Y'},columns={'Data1':'DA', 'Data2':'DB'})

在执行上述代码后,我们可以看到重命名后的 DataFrame。

(5)组内运算

Pandas 模块中的层次索引在数据的分组、汇总等操作中特别有用。例如,我们可以对数据进行求和,并指定计算的级别。

# 对第一层索引为 A 的数据按照第二层索引进行求和
print(data.sum(level=1))

在执行上述代码后,我们可以看到对第一层索引为 A 的数据按照第二层索引进行求和的结果。

3. 总结

本文通过两个实例详细讲解了 Pandas 模块缺失值处理和层次索引的应用。在处理数据缺失时,我们可以使用 dropna()fillna() 等方法对数据进行处理。在层次索引中,我们可以使用sort_index()rename() 等方法进行索引的操作。据此,我们可以更好地进行数据分析和处理。

本文链接:http://task.lmcjl.com/news/17371.html

展开阅读全文