You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何验证DataFrame每行多列列表长度一致性并生成校验列?

需求实现:校验DataFrame行内列表长度一致性

问题背景

现有如下结构的Pandas DataFrame,每列存储浮点数列表:

import pandas as pd
df = pd.DataFrame([
    ([40.33, 40.34, 40.22],[-71.11, -71.21, -71.14],[12, 45, 10]),
    ([41.23, 41.40, 41.22],[-72.01, -72.01, -72.01],[11, 23, 15]),
    ([43.33, 43.34],[-70.11, -70.21],[12, 40]),
    ([41.23, 41.40], [-72.01, -72.01, -72.01], [11, 23, 15])
], columns=['long', 'lat', 'accuracy'])

数据展示:

long                       lat                           accuracy
[40.33, 40.34, 40.22]      [-71.11, -71.21, -71.14]     [12, 45, 10]
[41.23, 41.40, 41.22]      [-72.01, -72.01, -72.01]     [11, 23, 15]
[43.33, 43.34]             [-70.11, -70.21]             [12, 40]
[41.23, 41.40]             [-72.01, -72.01, -72.01]     [11, 23, 15]

需要新增一列sanity,规则为:每行中long、lat、accuracy三列的列表长度完全一致时,值为TRUE,否则为FALSE,预期输出:

long                       lat                           accuracy      sanity
[40.33, 40.34, 40.22]      [-71.11, -71.21, -71.14]     [12, 45, 10]    TRUE
[41.23, 41.40, 41.22]      [-72.01, -72.01, -72.01]     [11, 23, 15]    TRUE
[43.33, 43.34]             [-70.11, -70.21]             [12, 40]        TRUE
[41.23, 41.40]             [-72.01, -72.01, -72.01]     [11, 23, 15]    FALSE

最优实现方法

方法1:简洁直观法(适合中小数据集)

用apply结合lambda表达式逐行校验:

df['sanity'] = df.apply(lambda row: len(row['long']) == len(row['lat']) == len(row['accuracy']), axis=1)

方法2:矢量化计算法(性能更优,适合大数据集)

先批量计算各列列表长度,再行内比较一致性:

# 计算每列的列表长度
len_long = df['long'].str.len()
len_lat = df['lat'].str.len()
len_acc = df['accuracy'].str.len()

# 生成sanity列
df['sanity'] = (len_long == len_lat) & (len_lat == len_acc)

说明

  • 方法1代码简洁、逻辑清晰,上手成本低;
  • 方法2采用Pandas矢量化操作,避免逐行循环,数据量越大性能优势越明显;
  • 两种方法输出结果完全一致,可根据数据集规模灵活选择。

内容的提问来源于stack exchange,提问作者Tristan Tran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:10:53