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我修改了我的代码,希望能奏效