Pandas - drop() 函数可以通过将其应用于 isnull() 函数的结果来删除缺失值吗?



我目前正在阅读《数据科学导论》一书,它的所有代码都是用python2编写的,但我正在尝试让它在python3上运行 所以当我尝试运行时:

edu.drop(edu['Value'].isnull(), axis=0)

它给出以下错误:

KeyError                                  Traceback (most recent call last)
<ipython-input-60-445dd51fcf75> in <module>
----> 1 eduDrop = edu.drop(edu['Value'].isnull(), axis=0)
2 eduDrop.head()
C:ProgramDataAnaconda3libsite-packagespandascoreframe.py in drop(self, labels, axis, index, columns, level, inplace, errors)
3995             level=level,
3996             inplace=inplace,
-> 3997             errors=errors,
3998         )
3999 
C:ProgramDataAnaconda3libsite-packagespandascoregeneric.py in drop(self, labels, axis, index, columns, level, inplace, errors)
3934         for axis, labels in axes.items():
3935             if labels is not None:
-> 3936                 obj = obj._drop_axis(labels, axis, level=level, errors=errors)
3937 
3938         if inplace:
C:ProgramDataAnaconda3libsite-packagespandascoregeneric.py in _drop_axis(self, labels, axis, level, errors)
3968                 new_axis = axis.drop(labels, level=level, errors=errors)
3969             else:
-> 3970                 new_axis = axis.drop(labels, errors=errors)
3971             result = self.reindex(**{axis_name: new_axis})
3972 
C:ProgramDataAnaconda3libsite-packagespandascoreindexesbase.py in drop(self, labels, errors)
5016         if mask.any():
5017             if errors != "ignore":
-> 5018                 raise KeyError(f"{labels[mask]} not found in axis")
5019             indexer = indexer[~mask]
5020         return self.delete(indexer)
KeyError: '[ True  True False False False False False False False False False Falsen False False False False False False False False False False False Falsen False False False False False False False False False False False Falsen  True  True False False False False False False False False False Falsen  True  True False False False False False False False False False Falsen  True False False False False False False False False False False Falsen  True False False False False False False False False False False Falsen  True False False False False False False False False False False Falsen False False False False False False False False False False False Falsen False False False False False False False False False False False Falsen False False False False False False False False False False False Falsen False False False False False False False False False False False Falsen False False False False False False False False False False False Falsen False False False False False False False False False False False Falsen False False False False False False  True  True  True  True  True  Truen False False False False False False False False False False False Falsen False False False False False False False False False False False Falsen False False False False False False False False False False False Falsen False False False False False False False False False False False Falsen False False False False False False False False False False False Falsen False False False False False False False False False False False Falsen  True False False False False False False False  True  True  True  Truen False False False False False False False False False False False Falsen False False False False False False False False False False False Falsen False False False False False False False False False False False Falsen False False False False False False False False False False False Falsen False False False False False False False False False False False Falsen False False False False False False False False False False False Falsen False False False False False False  True False  True False False Falsen  True False False False False False False False False False False Falsen False False False False False False False False False False False Falsen False False False False False False False False False False False Falsen False] not found in axis'

那么,这里的问题是什么:当前版本的drop((不支持这个还是什么?

问题

这不是Python 2.7/Python 3的问题。这是熊猫的错误用法。最近几个版本的 pandas 中的 drop 方法需要列名列表(如['Value'](或索引。你给它一系列的真/假。我不知道它不同的版本。

对于将来的问题,请确保添加相关软件的版本。

猜谜:你想实现什么?

当你写的时候

eduDrop = edu.drop(edu['Value'].isnull(), axis=0)

我猜你想删除列Value为空的所有行,对吧?

将来,请将"我想实现的目标"添加到您的问题中。它使答案更有可能有用。

猜测的解决方案

我会像这样使用dropna:

df.dropna(subset=['Value'])

您还可以使用以下构造:

df[df.Value.notnull()]

这将选择Value不为空的所有行。

无论哪种情况(使用dropna或上述选择模式(,您最终都会得到原始数据帧部分的静默副本。如果您尝试修改结果,您将收到如下警告:

A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

因此,您可能希望禁止显示警告或对结果进行显式copy(),以便明确您的意图。

最新更新