如何删除DataFrame指定列(索引78)含NAN的行?dropna方法异常求助
解决dropna(subset=[78])返回全NaN DataFrame的问题
核心原因分析
执行df_transposed.dropna(subset=[78])后得到全NaN的空DataFrame,大概率是以下两种情况:
- 列78的所有行都是NaN:dropna会删除该列含NaN的所有行,自然没有行保留,返回空DataFrame(显示为全NaN)。
- 列索引类型不匹配:转置后列索引可能是字符串类型(比如原行索引是字符串),你用整数78匹配不到实际列,pandas会默认该列所有值都是NaN,导致删除所有行。
排查与解决步骤
先验证列78的NaN分布
运行以下代码确认该列的非NaN行数:# 统计列78的NaN数量 print(df_transposed[78].isna().sum()) # 统计列78的非NaN数量 print(df_transposed[78].notna().sum())如果非NaN数量为0,说明这列本身全是NaN,没有可保留的行,结果符合逻辑;如果有非NaN值,继续下一步。
检查列索引类型
查看列索引的数据类型:print(df_transposed.columns.dtype)如果输出是
object(字符串类型),说明列索引是字符串,需要用字符串索引匹配:df4 = df_transposed.dropna(subset=['78'])用筛选替代dropna验证
直接筛选列78非NaN的行,看是否得到预期结果:df4 = df_transposed[df_transposed[78].notna()]如果这个代码能得到有效数据,说明dropna的用法没问题,只是之前的验证没到位;如果还是空,那确实列78无有效数据。
确认转置后的DataFrame结构
用df_transposed.head()或df_transposed.info()查看数据结构,确认列78存在且符合预期。
内容的提问来源于stack exchange,提问作者Kelly Cox
相关产品推荐
相关产品推荐

