Pandas 中删除空列
Pandas 数据帧是一个非常强大的数据操作工具。它是由行和列组成的表格数据结构,这个二维矩阵的大小可以根据数据集的复杂性而变化。我们可以使用不同类型的来源创建数据帧,从数据库到文件等等。
Pandas 数据帧中的列表示一系列信息,可以是整数、浮点数或字符串。我们可以对这些列执行多种操作,包括删除、索引和过滤等。在本文中,我们将执行从 Pandas 数据帧中删除/移除空列等基本操作。
首先,让我们理解在数据帧中什么是空列。
更多Pandas文章,请阅读:Pandas教程
创建带有空列的数据帧
我们通过利用计算机技术来创建一个用于分析数据的数据帧。每列都是一个数据块,它拥有一定的意义。在复杂的数据集中,生成的数据帧可能包含一些空列,这会降低数据帧的相关性。为了产生一个优化的数据帧,我们 tend to 删除这种不必要的数据。
如果一列包含 “NaN”(不是数字)值,则被认为是 “空”。 由“空格” 和 “零值” 组成的列在本质上不是“空的”,因为“空格”和“零值”都代表着数据集的某些特征。
当我们创建一个数据帧并且不向列传递任何数据时,就会创建一个空列。我们可以使用“dataframe.drop()”方法来删除正常列和空列,但是如果要特定删除空列,则需要使用“dataframe.dropna()”方法。让我们创建一个带有“NaN”值的数据帧,然后开始删除操作。
实例
我们导入“pandas”和“numpy”库,然后传递一个字典数据集,其中包含有关不同宿舍的信息。
我们使用“DataFrame()”函数创建数据帧并传递一个标签值列表来标记行。
在数据集中,我们使用Numpy库将“Hostel location”列分配为NaN值,最后打印数据帧。
import pandas as pd
import numpy as np
dataset = {"Hostel ID":["DSC224", "DSC124", "DSC568", "DSC345"], "Hostel Rating":[8, 6, 10, 5], "Hostel price":[35000, 32000, 50000, 24000], "Hostel location": [np.nan, np.nan, np.nan, np.nan]}
dataframe = pd.DataFrame(dataset, index= ["Hostel 1", "Hostel 2", "Hostel 3", "Hostel 4"])
print(dataframe)
输出
Hostel ID Hostel Rating Hostel price Hostel location
Hostel 1 DSC224 8 35000 NaN
Hostel 2 DSC124 6 32000 NaN
Hostel 3 DSC568 10 50000 NaN
Hostel 4 DSC345 5 24000 NaN
使用 dropna() 方法删除空列
让我们将 dropna() 方法应用于之前的数据帧。
实例
创建数据帧后,我们使用“dropna()”函数删除所有列的 NaN 值。
因为我们正在对列进行操作,所以将轴值指定为 “1”,然后通过将 “all” 值分配为 “how” 值来编写删除逻辑。这意味着仅当所有值都是 “NaN” 时才会删除列。
最后,我们创建并打印一个新的数据帧,其中包含非 “NaN” 值。
import pandas as pd
import numpy as np
dataset = {"旅店ID": ["DSC224", "DSC124", "DSC568", "DSC345"], "旅店评分": [8, 6, 10, 5], "旅店价格": [35000, 32000, 50000, 24000], "旅店位置": [np.nan, np.nan, np.nan, np.nan]}
dataframe = pd.DataFrame(dataset, index=["旅店1", "旅店2", "旅店3", "旅店4"])
print(dataframe)
Emp_drop = dataframe.dropna(how="all", axis=1)
print("使用 dropna() 删除无用列后的结果为:-")
print(Emp_drop)
输出结果
旅店ID 旅店评分 旅店价格 旅店位置
旅店1 DSC224 8 35000 NaN
旅店2 DSC124 6 32000 NaN
旅店3 DSC568 10 50000 NaN
旅店4 DSC345 5 24000 NaN
使用 dropna() 删除无用列后的结果为:-
旅店ID 旅店评分 旅店价格
旅店1 DSC224 8 35000
旅店2 DSC124 6 32000
旅店3 DSC568 10 50000
旅店4 DSC345 5 24000
注意 − 如果要对原数据框进行更改而不是创建一个新的数据框,则使用“ inplace ”参数。
dataframe.dropna(how="all", axis=1, inplace=True)
print(dataframe)
使用 notnull() 方法删除无用列
创建数据帧后,我们使用了“ notnull() ”方法和“ loc() ”函数来筛选并选取具有“NaN”值的列,指定了评估轴并打印了具有非“NaN”值的数据框。
示例
import pandas as pd
import numpy as np
dataset = {"旅店ID": ["DSC224", "DSC124", "DSC568", "DSC345"], "旅店评分": [8, 6, 10, 5], "旅店价格": [35000, 32000, 50000, 24000], "旅店位置": [np.nan, np.nan, np.nan, np.nan]}
dataframe = pd.DataFrame(dataset, index=["旅店1", "旅店2", "旅店3", "旅店4"])
print(dataframe)
dataframe = dataframe.loc[:, dataframe.notnull().any(axis=0)]
print("使用 notnull() 方法删除无用列的结果为: -")
print(dataframe)
输出结果
旅店ID 旅店评分 旅店价格 旅店位置
旅店1 DSC224 8 35000 NaN
旅店2 DSC124 6 32000 NaN
旅店3 DSC568 10 50000 NaN
旅店4 DSC345 5 24000 NaN
使用 notnull() 方法删除无用列的结果为: -
旅店ID 旅店评分 旅店价格
旅店1 DSC224 8 35000
旅店2 DSC124 6 32000
旅店3 DSC568 10 50000
旅店4 DSC345 5 24000
结论
在本文中,我们介绍了删除无用列的不同方法,即“ dropna() ”方法和“ notnull() ”方法,以及它们如何用于从数据框中删除无用列。我们还了解到了摆脱这些不必要数据的重要性以及如何增加数据框的相关性。