基于Pandas验证不同结构CSV中指定数值的存在性
嘿,这需求我熟,咱们一步步来实现它!下面是基于Pandas的完整解决方案,包含代码和细节说明:
实现步骤与代码示例
1. 加载两个CSV文件
首先用pandas.read_csv加载结构不同的两个CSV,不用特意处理结构差异,直接加载即可:
import pandas as pd import numpy as np # 加载CSV文件,替换成你的实际文件路径 csv1 = pd.read_csv("CSV1.csv") csv2 = pd.read_csv("CSV2.csv")
2. 从CSV1提取VAL1和VAL2(三位小数浮点数)
假设CSV1中这两个值对应的列名为VAL1和VAL2(如果不是,替换成实际列名就行),提取后咱们可以先做个格式验证,确保是三位小数的浮点数:
# 提取目标值,这里默认取第一行的数值,你可以根据实际需求调整行索引 val1 = csv1["VAL1"].iloc[0] val2 = csv2["VAL2"].iloc[0] # 验证是否为三位小数的浮点数(可选,但能避免后续验证出错) def check_three_decimal(num): if not isinstance(num, float): return False decimal_part = str(num).split(".")[-1] return len(decimal_part) == 3 assert check_three_decimal(val1), "VAL1不是三位小数的浮点数" assert check_three_decimal(val2), "VAL2不是三位小数的浮点数"
3. 验证VAL1是否存在于CSV2的第一列
注意:浮点数容易出现精度误差(比如0.123存成0.1230000001),所以别直接用in判断,用np.isclose做近似匹配更靠谱:
# 获取CSV2的第一列数据 csv2_first_col = csv2.iloc[:, 0] # 验证VAL1是否在第一列 val1_exists = np.any(np.isclose(csv2_first_col, val1)) if val1_exists: print(f"✅ VAL1 {val1} 存在于CSV2的第一列") else: print(f"❌ VAL1 {val1} 不存在于CSV2的第一列")
4. 验证VAL2是否是CSV2的列标题
CSV的列标题一般是字符串类型,所以咱们把VAL2转成字符串后再判断:
# 把VAL2转为字符串,匹配列标题的类型 val2_str = str(val2) # 验证是否为列标题 if val2_str in csv2.columns: print(f"✅ VAL2 {val2} 是CSV2的列标题") else: print(f"❌ VAL2 {val2} 不是CSV2的列标题")
一些注意事项
- 如果CSV1里的VAL1/VAL2不是固定行的数值,你可以根据实际逻辑调整提取方式,比如筛选特定条件的行
- 如果CSV2的列标题本身是数字类型(而非字符串),可以直接用
val2 in csv2.columns判断,不用转字符串 - 若CSV文件有特殊分隔符、编码等问题,记得在
read_csv里加上对应参数(比如sep=";"、encoding="utf-8")
内容的提问来源于stack exchange,提问作者NRD
相关产品推荐
相关产品推荐

