从具有值为空格的python数据框架中获取列名,而不使用循环



我有一个下面的数据框架,我试图以最有效的方式获得具有空字符串的列名。执行df.head()后的数据框如下所示:

id   type   check company  test
123   A     Soft             [[1649106820, 100029907158392,,,, 123]]                                
456   B     Hard    GMC      [[1649106812, 100029907158312,,,, 456]]   

我正在尝试不使用循环或以一种有效的方式来做谢谢你的帮助

预期输出{公司,测试}

使用apply()对所有行执行测试,然后使用.any()测试是否对任何行都成立。

def empty_val(val):
if isinstance(val, list):
return any(str(item).strip() == "" for item in val)
else
return str(item).strip() == ""
empty_cols = [col for col in df if df[col].apply(empty_val).any()]

下面是一种无需测试单个值类型即可查找包含空字符串的列的方法:

empty_cols = {col for col in df.columns if df[col].explode().explode().astype(str).str.strip().eq('').any()}

输出:

{'company', 'test'}

解释:

  • 使用explode()两次以确保我们已经解压缩了列表类型的值,例如问题
  • 中的test列中的值
  • 使用astype(str)将数值类型转换为字符串,例如id
  • 列中的那些
  • 使用str.strip().eq('')获取给定列的布尔序列,指示值(可能未打包)是否为空字符串(在去掉空格后)
  • 使用Series.any()将布尔系列减少为布尔值,指示列是否有空字符串
  • 使用集合推导式来获得包含所有包含空字符串的列的标签的集合(包括在解包list-of-list值之后)。

最新更新