Pandas 是 Python 中一个强大的数据处理库,可以方便地对数据进行读取、写入、切片、过滤、聚合、可视化等操作。在数据处理的过程中,我们会遇到一些空白部分(如 NaN 、空字符串等),这些空白部分会对后续的数据分析和建模产生影响,因此需要对它们进行处理。本文将详细讲解如何从整个数据框架中剥离空白部分。
准备工作
在开始之前,需要先安装 Pandas 库并导入相关模块,在这里我们使用常见的缩写方式:
import pandas as pd
另外,为了方便说明,我们假设有一个包含空白部分的数据框,它的名称为 df ,可以用以下代码创建:
import numpy as np
data = {'A': ['foo', np.nan, 'bar', 'baz', np.nan],
'B': [1, np.nan, 3, np.nan, 5],
'C': [np.nan, 7, 9, 10, 11],
'D': ['alpha', 'beta', 'gamma', 'delta', 'epsilon']}
df = pd.DataFrame(data)
这个数据框包含 5 行和 4 列,其中有一些空白部分(用 np.nan 表示):
A B C D
0 foo 1.0 NaN alpha
1 NaN NaN 7.0 beta
2 bar 3.0 9.0 gamma
3 baz NaN 10.0 delta
4 NaN 5.0 11.0 epsilon
检测空白部分
在处理空白部分之前,需要先了解有哪些位置存在空白部分。可以使用 isna() 或 isnull() 方法检测所有空白位置,返回值为布尔类型的数据框(True 表示该位置为空,False 表示该位置有值):
df.isna()
返回的结果为:
A B C D
0 False False True False
1 True True False False
2 False False False False
3 False True False False
4 True False False False
可以看到,数据框中有很多空白位置。
剥离每列的空白部分
1. 删除包含空白的列
首先,可以通过 dropna() 方法删除包含空白部分的列。该方法可以接收多个参数,常用的参数有以下两个:
- axis: axis 默认值为 0,表示删除行;axis=1 表示删除列。
-
how: 用于指定如何删除空白,有以下几种方式:
-
'any': 只要列包含空白部分,就删除整列。
- 'all': 只有列全部为空白部分,才删除整列。
下面的代码演示如何删除包含空白部分的列(axis=1):
df.dropna(axis=1, how='any')
返回的结果为:
D
0 alpha
1 beta
2 gamma
3 delta
4 epsilon
可以看到,只剩下了 D 这一列,其他列都被删除了。
2. 填充空白部分
其次,可以通过 fillna() 方法来填充列中的空白部分。fillna() 方法可以接收多个参数,常用的参数有以下两个:
- value: 用于指定填充的值。
- method: 用于指定填充的方法。
下面的代码演示如何使用不同的填充方式:
# 使用 0 填充空白部分
df.fillna(value=0)
# 使用前一个值填充空白部分
df.fillna(method='ffill')
# 使用后一个值填充空白部分
df.fillna(method='bfill')
其中,method='ffill' 表示使用前一个值填充空白部分(forward fill),method='bfill' 表示使用后一个值填充空白部分(backward fill)。
以上三个代码块返回的结果分别为:
# 使用 0 填充空白部分
A B C D
0 foo 1.0 0.0 alpha
1 0 0.0 7.0 beta
2 bar 3.0 9.0 gamma
3 baz 0.0 10.0 delta
4 0 5.0 11.0 epsilon
# 使用前一个值填充空白部分
A B C D
0 foo 1.0 NaN alpha
1 foo 1.0 7.0 beta
2 bar 3.0 9.0 gamma
3 baz 3.0 10.0 delta
4 baz 5.0 11.0 epsilon
# 使用后一个值填充空白部分
A B C D
0 foo 1.0 7.0 alpha
1 bar 3.0 7.0 beta
2 bar 3.0 9.0 gamma
3 baz 5.0 10.0 delta
4 NaN 5.0 11.0 epsilon
剥离每行的空白部分
同样的,在处理行级别的空白部分时,也可以使用 dropna() 和 fillna() 方法。
1. 删除包含空白的行
使用 dropna() 方法删除包含空白部分的行,可以像剥离列一样使用它,只需要把 axis 设为 0,用法如下:
df.dropna(axis=0, how='any')
返回的结果为:
A B C D
2 bar 3.0 9.0 gamma
可以看到,只保留了第二行中没有空白部分的数据。
2. 填充空白部分
与列的填充类似,使用 fillna() 方法填充行中的空白部分也是极为简单的。使用 fillna() 方法时,将 axis 设置为 0 ,可对每行进行填充,用法与前面演示的类似:
# 使用 0 填充空白部分
df.fillna(value=0, axis=0)
# 使用前一行填充空白部分
df.fillna(method='ffill', axis=0)
# 使用后一行填充空白部分
df.fillna(method='bfill', axis=0)
以上三个代码块返回的结果分别为:
# 使用 0 填充空白部分
A B C D
0 foo 1.0 NaN alpha
1 NaN NaN 7.0 beta
2 bar 3.0 9.0 gamma
3 baz NaN 10.0 delta
4 NaN 5.0 11.0 epsilon
# 使用前一行填充空白部分
A B C D
0 foo 1.0 NaN alpha
1 foo 1.0 7.0 beta
2 bar 3.0 9.0 gamma
3 baz 3.0 10.0 delta
4 baz 5.0 11.0 epsilon
# 使用后一行填充空白部分
A B C D
0 foo 1.0 7.0 alpha
1 bar 3.0 7.0 beta
2 bar 3.0 9.0 gamma
3 baz 5.0 10.0 delta
4 NaN 5.0 11.0 epsilon
总结
在本文中,我们介绍了如何从 Pandas 数据框中剥离空白部分,涵盖了列中空白的删除和填充、行中空白的删除和填充。需要注意的是,这些方法的使用时需要注意,要根据实际数据情况进行选择。如果不确定该如何剥离空白部分,可以先通过相应的输出函数,查看数据框中存在哪些空白部分。
最后,在处理很大的数据集时,应注意向量化计算和应用多线程技术,尽可能提升运行效率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Pandas – 从整个数据框架中剥离空白部分 - Python技术站