当 notnull、dropna 和 != 'nan' 不起作用时,如何从数据框列中删除 nan 值?

How to remove nan values from a dataframe column when notnull, dropna and != 'nan' don't work?

我有一个包含以下列和数据类型的数据框:

np_id                     object
target_id                 object
activity_type             object
activity_value            object
activity_units            object
assay_cell_type           object
SMILES                    object
standard_inchi_key        object
standard_inchi            object
target_type               object
target_name               object
target_organism_tax_id    object
target_organism           object
uniprot_id                object
dtype: object

df.uniprot_id 看起来像这样:

0            [nan]
1         [Q96KQ7]
2            [nan]
3         [P25779]
4            [nan]
            ...   
493830       [nan]
493831       [nan]
493832       [nan]
493833       [nan]
493834       [nan]

df['uniprot_id'].isnull().values.any() 给出 False

我想删除所有没有 uniprot_id 的行。我尝试了以下方法:

df.dropna(subset=['uniprot_id'], inplace=True)

df = df[df['uniprot_id'] != 'nan']

df = df[df['uniprot_id'] != 'NaN']

df[df.uniprot_id.notnull()]

为什么我的尝试不起作用?如何删除 nan 值,从而删除数据框中的行?

[nan] 被格式化为 nan 列表。将其替换为真正的 nan 值,如下所示:

nan_locs = pd.isnull(df['uniprot_id'].apply(lambda x: x[0]))
df['uniprot_id'][nan_locs] = np.nan

那么你的代码应该可以工作了。但是,您可能还想看看只是将每个项目从列表中删除,除非有理由将它们放在列表中:

df['uniprot_id'] = df['uniprot_id'].apply(lambda x: x[0])