Pandas无列DataFrame的shape异常及代码优化问询
问题与解决方案
Q1:让无列的空DataFrame返回shape(0, 0)
可以在筛选非空列后,通过dropna(how='all', axis=0)删除所有全空行(此时所有列已被筛除,每行自然处于全空状态),通过链式操作实现无需显式检查的效果:
err_df = df[[col for col in df if ~df[col].isna().all()]].dropna(how='all', axis=0)
结合Q2的优化写法可简化为:
err_df = df.loc[:, ~df.isna().all()].dropna(how='all', axis=0)
当所有列被筛除时,所有行会被自动删除,此时err_df.shape将返回(0, 0)。
Q2:优化筛选非空列的代码
原代码用列表推导式遍历列,可改用Pandas矢量化操作直接筛选列,更简洁高效:
# 通过布尔索引直接筛选非全空列 err_df = df.loc[:, ~df.isna().all()]
df.isna().all()会返回布尔Series,对应每列是否全为空值,取反后即可作为列筛选条件,这种写法更贴合Pandas的矢量化风格,执行效率也优于遍历列的列表推导式。
内容的提问来源于stack exchange,提问作者rams
相关产品推荐
相关产品推荐

