如何使用Pandas布尔掩码筛选数据类型?过滤含字符串与NaN的列
按数据类型筛选并过滤混合字符串与NaN列的NaN值
当然可以实现,操作起来还挺直接的。这类同时包含字符串和NaN的列,在Pandas里的 dtype 通常是object(因为NaN本质是浮点型,和字符串混合后列会被转为object类型),我们可以结合这个特点来处理:
单个目标列的处理
如果已经明确要处理的列,直接用notna()生成布尔掩码过滤即可,它能准确识别NaN值,保留非空的字符串:
# 过滤整个DataFrame,只保留目标列非NaN的行 filtered_df = df[df['your_column'].notna()] # 或者单独提取该列的非NaN值 non_nan_values = df['your_column'].dropna()
批量处理符合条件的列
如果要批量处理所有混合字符串和NaN的列(即dtype为object且包含NaN的列),可以先筛选出这类列,再统一过滤:
import pandas as pd # 筛选出符合条件的列:object类型且包含NaN target_cols = [col for col in df.columns if df[col].dtype == 'object' and df[col].isna().any()] # 过滤所有目标列都不为NaN的行(如果要保留任一非NaN,可调整逻辑) filtered_df = df.dropna(subset=target_cols)
注意点
如果你的列里存在字符串形式的"NaN"(不是Pandas识别的真正NaN值),需要先把它们转为标准NaN再处理:
df['your_column'] = df['your_column'].replace('NaN', pd.NA)
内容的提问来源于stack exchange,提问作者revness
相关产品推荐
相关产品推荐

