如何用Pandas根据薪资列是否为整数填充DataFrame的status列
解决方法
针对你的需求,根据薪资列的不同数据类型,提供对应的处理方案:
场景1:薪资列是字符串类型(存在6LKH这类非数字内容)
直接利用字符串的isdigit()方法判断是否为纯数字字符串,结果直接赋值给status列:
import pandas as pd # 示例数据 df = pd.DataFrame({ '员工姓名': ['张三', '李四', '王五'], '薪资': ['10000', '6LKH', '8500'], 'status': [None, None, None] }) # 填充status列 df['status'] = df['薪资'].str.isdigit()
str.isdigit()会返回布尔值:纯数字字符串返回True,含非数字字符返回False。如果需要兼容负数格式(如'-5000'),可以先过滤负号再判断:
df['status'] = df['薪资'].apply(lambda x: x.lstrip('-').isdigit() if isinstance(x, str) else False)
场景2:薪资列是数值类型(如float,存在5000.0这类整数值)
需要判断数值是否为整数(小数部分为0),两种实现方式:
方法A:使用is_integer()方法
df['status'] = df['薪资'].apply(lambda x: x.is_integer() if pd.notna(x) else False)
方法B:取模运算判断
import numpy as np df['status'] = np.mod(df['薪资'], 1) == 0
两种方法都会将5000.0识别为整数(返回True),5000.5返回False。
通用兼容方案(混合类型场景)
如果薪资列同时存在字符串和数值类型,统一转为字符串后再判断:
df['status'] = df['薪资'].astype(str).str.lstrip('-').isdigit()
内容的提问来源于stack exchange,提问作者Anjali
相关产品推荐
相关产品推荐

