Pandas 删除带有 NaN 的行
Suraj Joshi
2023年1月30日
Pandas
Pandas DataFrame Row
Pandas NaN
-
Pandas 使用
DataFrame.notna()方法删除带有 NaN 的行 -
Pandas 使用
DataFrame.dropna()方法只删除所有列都是NaN值的行 -
Pandas 使用
DataFrame.dropna()方法仅在某一列的值为NaN的情况下才删除行 -
Pandas 使用
DataFrame.dropna()方法删除任意列为NaN值的行
本教程解释了我们如何使用 DataFrame.notna() 和 DataFrame.dropna() 方法删除所有带有 NaN 值的行。
我们将在下面的示例代码中使用 DataFrame。
import pandas as pd
roll_no = [501, 502, 503, 504, 505]
data = pd.DataFrame(
{
"Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
"Age": [19, None, 18, 21, None],
"Income($)": [4000, 5000, None, 3500, None],
"Expense($)": [3000, 2000, 2500, 25000, None],
}
)
print(data)
输出:
Name Age Income($) Expense($)
0 Alice 19.0 4000.0 3000.0
1 Steven NaN 5000.0 2000.0
2 Neesham 18.0 NaN 2500.0
3 Chris 21.0 3500.0 25000.0
4 Alice NaN NaN NaN
Pandas 使用 DataFrame.notna() 方法删除带有 NaN 的行
DataFrame.notna() 方法返回一个布尔对象,其行数和列数与调用者 DataFrame 相同。如果元素不是 NaN,它将被映射到布尔对象中的 True 值,如果元素是 NaN,它将被映射到 False 值。
import pandas as pd
roll_no = [501, 502, 503, 504, 505]
data = pd.DataFrame(
{
"Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
"Age": [19, None, 18, 21, None],
"Income($)": [4000, 5000, None, 3500, None],
"Expense($)": [3000, 2000, 2500, 25000, None],
}
)
print("Initial DataFrame:")
print(data)
print("")
data = data[data["Income($)"].notna()]
print("DataFrame after removing rows with NaN value in Income Field:")
print(data)
输出:
Initial DataFrame:
Name Age Income($) Expense($)
0 Alice 19.0 4000.0 3000.0
1 Steven NaN 5000.0 2000.0
2 Neesham 18.0 NaN 2500.0
3 Chris 21.0 3500.0 25000.0
4 Alice NaN NaN NaN
DataFrame after removing rows with NaN value in Income Field:
Name Age Income($) Expense($)
0 Alice 19.0 4000.0 3000.0
1 Steven NaN 5000.0 2000.0
3 Chris 21.0 3500.0 25000.0
这里,我们将 notna() 方法应用于 data 的 Income($) 列,它将返回一个系列对象,根据该列的值,有 True 或 False 值。当我们将布尔对象作为索引传递给原始 DataFrame 时,我们只得到 Income($) 列没有 NaN 值的行。
Pandas 使用 DataFrame.dropna() 方法只删除所有列都是 NaN 值的行
import pandas as pd
roll_no = [501, 502, 503, 504, 505]
data = pd.DataFrame(
{
"Id": [621, 645, 210, 345, None],
"Age": [19, None, 18, 21, None],
"Income($)": [4000, 5000, None, 3500, None],
"Expense($)": [3000, 2000, 2500, 25000, None],
}
)
print("Initial DataFrame:")
print(data)
print("")
data = data.dropna(how="all")
print("DataFrame after removing rows with NaN value in All Columns:")
print(data)
输出:
Initial DataFrame:
Id Age Income($) Expense($)
0 621.0 19.0 4000.0 3000.0
1 645.0 NaN 5000.0 2000.0
2 210.0 18.0 NaN 2500.0
3 345.0 21.0 3500.0 25000.0
4 NaN NaN NaN NaN
DataFrame after removing rows with NaN value in All Columns:
Id Age Income($) Expense($)
0 621.0 19.0 4000.0 3000.0
1 645.0 NaN 5000.0 2000.0
2 210.0 18.0 NaN 2500.0
3 345.0 21.0 3500.0 25000.0
它只删除 DataFrame 中所有字段中含有 NaN 值的行。我们在 dropna() 方法中设置 how='all',让该方法只在行的所有列值都是 NaN 时才删除行。
Pandas 使用 DataFrame.dropna() 方法仅在某一列的值为 NaN 的情况下才删除行
import pandas as pd
roll_no = [501, 502, 503, 504, 505]
data = pd.DataFrame(
{
"Id": [621, 645, 210, 345, None],
"Age": [19, None, 18, 21, None],
"Income($)": [4000, 5000, None, 3500, None],
"Expense($)": [3000, 2000, 2500, 25000, None],
}
)
print("Initial DataFrame:")
print(data)
print("")
data = data.dropna(subset=["Id"])
print("DataFrame after removing rows with NaN value in Id Column:")
print(data)
输出:
Initial DataFrame:
Id Age Income($) Expense($)
0 621.0 19.0 4000.0 3000.0
1 645.0 NaN 5000.0 2000.0
2 210.0 18.0 NaN 2500.0
3 345.0 21.0 3500.0 25000.0
4 NaN NaN NaN NaN
DataFrame after removing rows with NaN value in Id Column:
Id Age Income($) Expense($)
0 621.0 19.0 4000.0 3000.0
1 645.0 NaN 5000.0 2000.0
2 210.0 18.0 NaN 2500.0
3 345.0 21.0 3500.0 25000.0
它将删除 DataFrame 中所有仅在 Id 列中具有 NaN 值的列。
Pandas 使用 DataFrame.dropna() 方法删除任意列为 NaN 值的行
import pandas as pd
roll_no = [501, 502, 503, 504, 505]
data = pd.DataFrame(
{
"Id": [621, 645, 210, 345, None],
"Age": [19, None, 18, 21, None],
"Income($)": [4000, 5000, None, 3500, None],
"Expense($)": [3000, 2000, 2500, 25000, None],
}
)
print("Initial DataFrame:")
print(data)
print("")
data = data.dropna()
print("DataFrame after removing rows with NaN value in any column:")
print(data)
输出:
Initial DataFrame:
Id Age Income($) Expense($)
0 621.0 19.0 4000.0 3000.0
1 645.0 NaN 5000.0 2000.0
2 210.0 18.0 NaN 2500.0
3 345.0 21.0 3500.0 25000.0
4 NaN NaN NaN NaN
DataFrame after removing rows with NaN value in any column:
Id Age Income($) Expense($)
0 621.0 19.0 4000.0 3000.0
3 345.0 21.0 3500.0 25000.0
默认情况下,dropna() 方法将删除所有至少有一个 NaN 值的行。
Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Suraj Joshi
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn相关文章 - Pandas DataFrame Row
- 如何获取 Pandas DataFrame 的行数
- 如何对 Pandas 中的 DataFrame 行随机排序
- 如何根据 Pandas 中的列值过滤 DataFrame 行
- 如何在 Pandas 中遍历 DataFrame 的行
- Pandas 中如何获取特定列满足给定条件的所有行的索引
- Pandas DataFrame 删除某行
