如何交换Pandas DataFrame中某列数值与另一列的对应值?
Pandas DataFrame指定列错误值交换解决方案
问题场景
存在如下结构的DataFrame,其中部分行的last_name列被错误填入了年龄数值,age列则填入了姓氏字符串,需要将这些行的两列值进行交换,正常行保持不变。
创建示例DataFrame
import pandas as pd df = pd.DataFrame([['Captain', 'Crunch', 72], ['Trix', 36, 'Rabbit'], ['Count', 'Chocula', 41], ['Tony', 54, 'Tiger'], ['Buzz', 28, 'Bee'], ['Toucan', 'Sam', 38]], columns=['first_name', 'last_name', 'age'])
输入DataFrame
first_name last_name age 0 Captain Crunch 72 1 Trix 36 Rabbit 2 Count Chocula 41 3 Tony 54 Tiger 4 Buzz 28 Bee 5 Toucan Sam 38
解决方案代码
# 筛选出last_name为数字字符串的行 mask = df['last_name'].str.isnumeric() # 交换这些行的last_name和age列值 df.loc[mask, ['last_name', 'age']] = df.loc[mask, ['age', 'last_name']].values
执行后结果
first_name last_name age 0 Captain Crunch 72 1 Trix Rabbit 36 2 Count Chocula 41 3 Tony Tiger 54 4 Buzz Bee 28 5 Toucan Sam 38
方法说明
- 利用
str.isnumeric()方法识别last_name列中的数字字符串行,生成布尔掩码 - 通过
loc定位到需要交换的行和列,直接将两列的位置反转赋值,实现值交换 - 该方法仅对存在错误的行生效,不会影响数据正确的行
内容的提问来源于stack exchange,提问作者swilson
相关产品推荐
相关产品推荐

