Python 当notnull、dropna和!=';楠';don';不行?

Python 当notnull、dropna和!=';楠';don';不行?,python,pandas,dataframe,nan,Python,Pandas,Dataframe,Nan,我有一个包含以下列和数据类型的数据框架: np_id object target_id object activity_type object activity_value object activity_units object assay_cell_type object SMILES objec

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

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(子集=['uniprot\u id',inplace=True)

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

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

df[df.uniprot\u 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])

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

据我所知,你的
[nan]
值是(一)个元素
nan
的列表,不是吗?使用@Tom answer在dropna之前替换它们。请记住,@Tom理解那些是(
'[nan]
)字符串,我认为这些是列表…不管怎样,概念是(那些单元格中没有纯
nan
/
无对象)@Brandt你可能是对的事实上,我刚才说的字符串就是我使用pd.read_clipboard()时发生的事情在复制他的示例df后,但经过一些测试后,很可能是一个列表,具体包含一个np.nan(而不是一个None),据我所知,您的
[nan]
值是(一个)元素
nan
的列表,不是吗?使用@Tom answer在dropna
之前替换它们。请记住,@Tom理解那些是(
'[nan]
)字符串,我认为这些是列表…不管怎样,概念是(那些单元格中没有纯
nan
/
无对象)@Brandt你可能是对的事实上,我刚才说的字符串就是我使用pd.read_clipboard()时发生的事情在复制了他的示例df之后,但经过一些测试后,很可能是一个特定包含np.nan(而不是None)的列表嘿,我使用了你的代码,后面跟着
df.dropna(subset=['uniprot\u id',inplace=True)
,我的列中仍然有
[nan]
。我还可以尝试什么?@Gabriel我修改了我的代码,希望它能工作。嘿,我使用了你的代码,后面跟着
df.dropna(subset=['uniprot\u id',inplace=True)
,我的列中仍然有
[nan]
。我还能尝试什么?@Gabriel我修改了我的代码,希望能奏效