Pandas-从整个数据框架中剥离空白部分
在进行数据分析时,我们常常需要对数据进行清洗和整理,其中一个重要的步骤是剥离空白部分。Pandas提供了许多函数来处理空白部分,包括空值和不确定值(NaN)。在本攻略中,我们将讲解如何使用Pandas的函数来从整个数据框架中剥离空白部分。
一、处理缺失值
1.1 创建含有缺失值的数据框架
我们先来创建一个含有缺失值的数据框架,作为我们练习的数据源。
import pandas as pd
import numpy as np
df = pd.DataFrame({'A':[1,2,np.nan], 'B':[np.nan, 5, 6], 'C':[7,8,9]})
这个数据框架中含有几个NaN值,即缺失值。
1.2 查找缺失值
我们可以使用.isna()
函数来查找数据框架中的缺失值。这个函数在有缺失值的位置返回True,在有数据的位置返回False。
df.isna()
它的输出结果如下:
A B C
0 False True False
1 False False False
2 True False False
我们可以看到,缺失值所在位置返回True,非缺失值所在位置返回False。
1.3 去除含有缺失值的行
通过使用.dropna()
函数,我们可以去除数据框架中含有缺失值的行。这个函数默认去除任意含有缺失值的行,也可以按列进行去除。
df.dropna()
输出结果如下:
A B C
1 2.0 5.0 8
由于第一行和第三行都含有缺失值,所以这两行被去除了。
1.4 填充缺失值
有时候,我们不想去除含有缺失值的行,而是想填充缺失值。这时可以使用.fillna()
函数来填充缺失值。这个函数提供了多种填充缺失值的方法,比如:用某个特定值填充、用前一个或后一个非缺失值填充、用平均值或中位数填充等等。下面我们以用列A的平均值填充列A中的缺失值为例,来介绍.fillna()
函数的使用方法。
df.fillna(value=df['A'].mean())
输出结果如下:
A B C
0 1.0 5.0 7
1 2.0 5.0 8
2 1.5 6.0 9
我们可以看到,第一行的A列被填充为1.0+2.0/2=1.5。
二、处理空白部分
针对空白部分,我们主要是指数据框架中的空字符串或空值。Pandas提供了多个函数来处理空白部分,包括.replace()
、.dropna()
和.fillna()
等等。
2.1 创建含有空白部分的数据框架
我们先来创建一个含有空白部分的数据框架,作为我们练习的数据源。
df_blank = pd.DataFrame({'A':['', 'ball', '','car'], 'B':['apple', '', np.nan, ''], 'C':['', '', '', 'boat']})
这个数据框架中含有空字符串和空值。
2.2 去除含有空白部分的行
我们可以使用.replace()
函数来去除含有空字符串的行,使用.dropna()
函数来去除含有空值的行。这里我们只演示如何去除含有空字符串的行。
df_cleaned = df_blank.replace('', np.nan).dropna()
我们先使用.replace()
函数将数据框架中所有的空字符串替换为缺失值NaN,然后使用.dropna()
函数将所有含有缺失值NaN的行去除。
最终输出结果如下:
A B C
1 ball apple
我们可以看到,第一行和第三行中含有空字符串,这两行都被去除了。
2.3 填充空白部分
有时候,我们不想去除含有空白部分的行,而是想填充空值或空字符串。这时可以使用.replace()
函数和.fillna()
函数来填充空白部分。具体方法如下:
a. 用某个特定值填充空白部分
df_cleaned.replace('', 'UNKNOWN')
这个命令可以将空字符串替换为’UNKNOWN’。
b. 用前一个或后一个非空值填充空白部分
df_blank.fillna(method='ffill')
这个命令可以将空值用其前一个非空值来填充。
c. 用平均值、中位数等统计量填充空白部分
这个方法和前面针对缺失值的方法是类似的。以使用列B的平均值来填充列B中的空值为例,我们可以使用如下命令:
df_blank['B'].fillna(value=df_blank['B'].mean())
输出结果如下:
0 apple
1 apple
2 5.5
3 apple
Name: B, dtype: object
我们可以看到,第三行的B列被填充为(5+6)/2=5.5。
三、总结
从整个数据框架中剥离空白部分是数据预处理的重要环节,有助于数据分析效果的提升。在本攻略中,我们结合实例为大家详细介绍了如何使用Pandas的函数处理缺失值和空白部分,希望对大家的实际工作有所帮助。