我目前正在阅读《数据科学导论》一书,它的所有代码都是用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()
,以便明确您的意图。