如何使用pandas逐行校验字段值类型并生成对应类型判断列
逐行校验DataFrame字段类型实现
需求说明
现有包含Name、Age两个字段的DataFrame,存在值类型不符合预期的异常值,原始数据如下:
| Name | Age |
|---|---|
| John | 20.5 |
| Alice | 39.1 |
| Pam | 41.0 |
| 203921 | Hope |
需要新增两个校验列:
Name_Type:该行Name值为字符串类型时返回True,否则返回FalseAge_Type:该行Age值为浮点类型时返回True,否则返回False
校验规则要求:Name列中John、Alice、Pam对应Name_Type为True,203921对应为False;Age列中20.5、39.1、41.0对应Age_Type为True,Hope对应为False。
实现代码
pandas中混合类型的列会被统一识别为object类型,直接查看列dtype无法定位单条异常值,需要逐行取单个值用isinstance判断原生类型,代码如下:
import pandas as pd # 构建原始测试DataFrame df = pd.DataFrame({ "Name": ["John", "Alice", "Pam", 203921], "Age": [20.5, 39.1, 41.0, "Hope"] }) # 逐行生成类型校验列 df["Name_Type"] = df["Name"].apply(lambda x: isinstance(x, str)) df["Age_Type"] = df["Age"].apply(lambda x: isinstance(x, float))
运行结果
执行代码后输出的DataFrame如下,完全匹配预期校验结果:
| 索引 | Name | Age | Name_Type | Age_Type |
|---|---|---|---|---|
| 0 | John | 20.5 | True | True |
| 1 | Alice | 39.1 | True | True |
| 2 | Pam | 41.0 | True | True |
| 3 | 203921 | Hope | False | False |
避坑提示:如果后续需要扩展其他类型校验,直接修改
isinstance的第二个参数即可,比如校验整数类型就传入int,校验布尔类型传入bool,不要尝试用正则匹配值的格式判断类型,准确率远低于原生类型判断。
内容的提问来源于stack exchange,提问作者H_SOCIAL MEDIA
相关产品推荐
相关产品推荐

