繁体   English   中英

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

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

我有一个 dataframe 具有以下列和数据类型:

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 值,以及 dataframe 中的行?

[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])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM