当 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])
我有一个包含以下列和数据类型的数据框:
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])