使用pandas dropna()删除缺失值异常,输出为Excel列名求排查
问题根源
你代码里的逻辑走反了:
df1 = df.loc[df.isnull().any(axis=1)]是把所有带至少一个缺失值的行都挑出来了,取前10行得到first_10_rows。- 然后你对这些本身就带缺失值的行调用
dropna()(默认规则是只要行里有缺失值就删整行),结果自然是所有行都被删掉,只剩列名。
修正方法
根据你的实际需求选对应的写法:
需求1:删除所有含缺失值的行
直接对原始DataFrame操作,不用先筛选有缺失的行:
import numpy as np import pandas as pd df = pd.read_excel("1.xlsx",index_col='Variables',na_values=['-']) print("原始数据前10行") print(df.head(10)) print(" ") print("删除含缺失值的行后的数据") df_cleaned = df.dropna() print(df_cleaned)
需求2:只删除全是缺失值的行
如果想保留部分有缺失值的行,只删完全空的行,给dropna()加参数:
# 只删除整行都是缺失值的记录 df_cleaned = df.dropna(how='all')
需求3:先看有缺失的行,再看清理后的数据
要是你想先展示带缺失的行,再看清理后的完整结果,得分开对原始数据处理:
import numpy as np import pandas as pd df = pd.read_excel("1.xlsx",index_col='Variables',na_values=['-']) print("含缺失值的前10行") df_with_na = df.loc[df.isnull().any(axis=1)].head(10) print(df_with_na) print(" ") print("清理后的完整数据") df_cleaned = df.dropna() print(df_cleaned)
内容的提问来源于stack exchange,提问作者unleasehed
相关产品推荐
相关产品推荐

