如何在 Pandas 中根据条件替换列中的值
在 Python 中,我们可以借助 Pandas 的各种内置函数(例如 **loc、where 和 mask、apply 和 lambda** 等)根据条件替换列中的值。Pandas 是一个用于数据操作和处理结构化数据的 Python 库。本文将介绍如何在 Pandas 中根据条件替换列中的值。
方法一:使用 loc
loc 函数用于访问 DataFrame 中的一组行和列。我们可以使用此函数根据某些条件替换列中的值。
语法
df.loc[row_labels, column_labels]
loc 方法用于根据标签从 DataFrame 中选择行和列。这里,**row_labels** 是用于从 DataFrame 中选择行的标签或标签列表,而 **column_labels** 是用于从 DataFrame 中选择列的标签或标签列表。
示例
在下面的示例中,我们将把年龄超过 50 岁的人的性别替换为男性,在我们创建的 DataFrame 中。我们使用 `df.loc[df['age'] >= 50, 'gender']` 来访问所有年龄大于或等于 50 岁的行以及这些行的 'gender' 列。然后,我们将 'gender' 列的值替换为 'M'。
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 35, 45, 55, 65],
'gender': ['F', 'M', 'M', 'F', 'F']
}
df = pd.DataFrame(data)
df.loc[df['age'] >= 50, 'gender'] = 'M'
print(df)
输出
name age gender 0 Alice 25 F 1 Bob 35 M 2 Charlie 45 M 3 David 55 M 4 Emily 65 M
方法二:使用 where 和 mask
where 和 mask 函数用于根据条件替换值。where 函数替换条件为 False 的值,而 mask 函数替换条件为 True 的值。
语法
df.where(condition, other=nan, inplace=False, axis=None, level=None, errors='raise') df.mask(condition, other=nan, inplace=False, axis=None, level=None, errors='raise')
where 和 mask 方法用于根据条件替换 DataFrame 中的值。这里,**condition** 是一个布尔数组或一个可调用函数,用于指定替换条件。**other** 是用于替换现有值的 value。如果 inplace 为 True,则修改原始 DataFrame。**axis** 指定是沿行 (0) 还是列 (1) 替换值。**level** 指定多级索引的级别。errors 指定如何处理错误。
示例
在下面的示例中,我们将把所有性别为男性的人的年龄替换为 0。我们使用 `df['age'].where(df['gender'] != 'M', 0)` 将性别为 'M' 的人的年龄替换为 0。
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 35, 45, 55, 65],
'gender': ['F', 'M', 'M', 'F', 'F']
}
df = pd.DataFrame(data)
df['age'] = df['age'].where(df['gender'] != 'M', 0)
print(df)
输出
name age gender 0 Alice 25 F 1 Bob 0 M 2 Charlie 0 M 3 David 55 F 4 Emily 65 F
我们也可以使用 mask 方法执行相同的操作。
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 35, 45, 55, 65],
'gender': ['F', 'M', 'M', 'F', 'F']
}
df = pd.DataFrame(data)
df['age'] = df['age'].mask(df['gender'] == 'M', 0)
print(df)
输出
name age gender 0 Alice 25 F 1 Bob 0 M 2 Charlie 0 M 3 David 55 F 4 Emily 65 F
方法三:使用 Apply 和 Lambda
我们还可以使用 apply 函数和 lambda 函数根据某些条件替换列中的值。
语法
df.apply(func, axis=0, raw=False, result_type=None, args=(), **kwds) lambda arguments: expression
apply 方法用于将函数应用于 DataFrame。lambda 函数是一种匿名函数,可以与 apply 方法一起使用,将函数应用于 DataFrame 的每一行或每一列。这里,**func** 是要应用于 DataFrame 的函数。**axis** 指定是将函数应用于行 (0) 还是列 (1)。**raw** 如果为 True,则将函数应用于底层的 numpy 数组。**result_types** 指定结果对象的类型。**args** 是要传递给函数的参数元组。**kwargs** 是要传递给函数的其他关键字参数。
示例
在下面的示例中,我们使用 `df.apply(lambda x: 'F' if x['name'].startswith('A') else x['gender'], axis=1)` 将 lambda 函数应用于 DataFrame 的每一行。lambda 函数将名称以 'A' 开头的性别替换为 'F'。
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 35, 45, 55, 65],
'gender': ['F', 'M', 'M', 'F', 'F']
}
df = pd.DataFrame(data)
df['gender'] = df.apply(lambda x: 'F' if x['name'].startswith('A') else x['gender'], axis=1)
print(df)
输出
name age gender 0 Alice 25 F 1 Bob 35 M 2 Charlie 45 M 3 David 55 F 4 Emily 65 F
方法四:使用 map 方法
map 方法用于根据字典替换 DataFrame 列中的值。
语法
df['column'] = df['column'].map(dict)
这里,**column** 是要替换值的列,**dict** 是将旧值映射到新值的字典。
示例
如果我们想将所有年龄小于或等于 30 岁的人的性别替换为 'F'。我们可以这样使用 map 方法:
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 35, 45, 55, 65],
'gender': ['F', 'M', 'M', 'F', 'F']
}
df = pd.DataFrame(data)
df['age'] = df['age'].mask(df['gender'] == 'M', 0)
print(df)
输出
name age gender 0 Alice 25 F 1 Bob 0 M 2 Charlie 0 M 3 David 55 F 4 Emily 65 F
方法五:使用 numpy.where() 方法
numpy.where() 方法用于根据条件替换 DataFrame 列中的值。
语法
df['column'] = np.where(condition, x, y)
这里,**condition** 是一个布尔数组,用于指定替换条件。
**X** 是在条件为 True 时用于替换现有值的 value。**y** 是在条件为 False 时保留的值。
示例
如果我们想将所有性别为 'M' 的人的年龄替换为 0。我们可以这样使用 numpy.where() 方法:
import pandas as pd
import numpy as np
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 35, 45, 55, 65],
'gender': ['F', 'M', 'M', 'F', 'F']
}
df = pd.DataFrame(data)
df['age'] = np.where(df['gender'] == 'M', 0, df['age'])
print(df)
输出
name age gender 0 Alice 25 F 1 Bob 0 M 2 Charlie 0 M 3 David 55 F 4 Emily 65 F
结论
在下面的示例中,我们讨论了如何使用 Python 内置方法(例如 loc、where 和 mask、apply 和 lambda、map() 和 numpy.where() 方法)根据条件在 pandas 中替换列中的值。我们可以根据条件在 pandas 中替换列中的值。根据场景和数据类型,一种方法可能比其他方法更合适。始终选择高效且易于理解的方法是一个好习惯。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP