Python Pandas如何检查一维与多维数组是否为float/int类型
Pandas CSV列数值类型校验实现方案
现有代码的核心问题
- 导入语法错误:
import pandas pd缺少as关键字,正确写法为import pandas as pd - 类型判断逻辑错误:
check["Multi"]获取的是Pandas的Series整列对象,不是单个单元格的值,直接用isinstance判断不可能匹配int/float类型 - 数据解析缺失:CSV中
|分隔的数组结构默认会被读取为字符串,需要先解析为Python列表再做类型校验
正确实现代码
针对Multi列2维数组、Single列1维数组的校验需求,完整实现如下:
import pandas as pd import ast def parse_and_validate(cell_value, expected_dim): # 替换自定义分隔符|为标准逗号,转换为Python可识别的列表格式 processed_str = cell_value.replace('|', ',') try: data = ast.literal_eval(processed_str) except (SyntaxError, ValueError): return False, f"格式解析失败:{cell_value}" # 递归校验维度和元素类型 def _check_nested(arr, dim): if dim == 1: for item in arr: if not isinstance(item, (int, float)): return False, f"存在非数字元素:{item}" return True, "" for sub_arr in arr: if not isinstance(sub_arr, list): return False, f"维度不匹配,期望{expected_dim}维" res, err_msg = _check_nested(sub_arr, dim-1) if not res: return False, err_msg return True, "" return _check_nested(data, expected_dim) # 读取CSV时指定dtype=str避免自动类型转换 df = pd.read_csv("file.csv", dtype=str) # 校验Multi列(2维数组要求) for row_idx, cell_val in enumerate(df["Multi"]): is_valid, err_info = parse_and_validate(cell_val, expected_dim=2) if not is_valid: print(f"第{row_idx+1}行Multi列校验失败:{err_info},需为仅包含int/float的2维数组") # 校验Single列(1维数组要求) for row_idx, cell_val in enumerate(df["Single"]): is_valid, err_info = parse_and_validate(cell_val, expected_dim=1) if not is_valid: print(f"第{row_idx+1}行Single列校验失败:{err_info},需为仅包含int/float的1维数组")
运行效果说明
针对你提供的示例CSV,运行后输出结果为:
第1行Multi列校验失败:存在非数字元素:yes,需为仅包含int/float的2维数组
和实际报错场景匹配,可正常识别非数字元素、维度不匹配、格式错误三类异常。
内容的提问来源于stack exchange,提问作者tony selcuk
相关产品推荐
相关产品推荐

