Pandas 如何根据条件替换列中的值

Pandas 如何根据条件替换列中的值

在Python中,我们可以使用Pandas内置函数如 loc、where、mask、apply和lambda 等,根据条件替换列中的值。Pandas是一个用于数据处理和处理结构化数据的Python库。在本文中,我们将根据条件在Pandas中替换列中的值。

方法1:使用loc

loc函数用于在DataFrame中访问一组行和列。我们可以使用该函数根据某个条件替换列中的值。

语法

df.loc[row_labels, column_labels]

loc 方法用于基于标签从DataFrame中选择行和列。在这里, row_labels 是一个标签或标签列表,用于从DataFrame中选择行,而 column_labels 是一个标签或标签列表,用于选择DataFrame中的列。

示例

在下面的示例中,我们将用’Male’替换年龄大于50岁的人的性别,在我们创建的数据框中。我们使用df.loc[df[‘age’] >= 50, ‘gender’]来访问所有年龄大于或等于50的行,并且这些行的’gender’列。然后,我们用’M’替换了’gender’列的值。

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

方法2:使用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是要替换现有值的值。如果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

方法3:使用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 是要传递给函数的参数元组。 ****kwds** 是要传递给函数的其他关键字参数。

示例

在下面的示例中,我们使用了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

方法4:使用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

方法5:使用numpy.where()方法

numpy.where()方法用于根据条件替换DataFrame列中的值。

语法

df['column'] = np.where(condition, x, y)

在这里, condition 是一个布尔数组,指定替换的条件。

X 是原始值的替换值,当条件为True时。

y 是条件为False时要保留的值。

示例

如果我们想要用0替换所有性别为’M’的人的年龄。我们可以使用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中基于条件替换列中的值。根据场景和数据类型的不同,某种方法可能比其他方法更合适。选择高效且易于理解的方法始终是一个好的实践。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程