• 可以使用以下代码来得到 df 某一列 trim 后长度为 0,且不为 null 的数量:

from odps.df import Scalarfrom odps import types# 假设您要操作的 DataFrame 名称为 df,某一列名称为 col_name# 先使用 trim 函数将该列中的字符串前后空格去除trimmed_col = df[col_name].trim()# 统计符合条件的记录数count = df.filter((Scalar(trimmed_col) == ').ifelse(1, 0).astype(types.boolean) & df[col_name].notnull()).count().execute()

这段代码的逻辑是:

  • 使用 trim 函数将目标列中的字符串的前后空格去除,生成一个新的被 trim 后的列 trimmed_col;
  • 使用 filter 函数筛选出满足条件的记录,注意要加上 & df[col_name].notnull() 条件,以排除 null 值。在这里,我们使用 Scalar 函数将一个 Python 值转化为一个 ODPS 语义的标量,即将 trimmed_col == ‘ 转化为一个标量(即一个包含一个元素的 DataFrame),然后使用 ifelse 函数将其转化为 0 或 1 的值,并将其转化为 boolean 类型。这样就可以排除掉符合要求的 null 值了。
  • 使用 count 函数统计得到满足条件的记录数。

最后,可以输出 count 值,或将它存储到其他变量中进行进一步的处理。