Python Getting ValueError:需要指定至少一个';标签'';指数';或';列';将标签列表传递为';列';drop()方法的参数
我正在传递一个索引类型变量(Python Getting ValueError:需要指定至少一个';标签'';指数';或';列';将标签列表传递为';列';drop()方法的参数,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我正在传递一个索引类型变量(Pandas.Index),该变量包含我要从数据帧中删除的列的标签,并且工作正常。它是索引类型,因为我是根据数据帧本身的特定条件提取列名的 之后,我需要向该列表中添加另一个列名,因此我将Index对象转换为Python列表,以便附加额外的标签名。但是,在将列表作为columns参数传递给数据帧上的drop()方法时,我现在不断得到错误: ValueError:需要指定至少一个“标签”、“索引”或“列” 如何解决此错误 我使用的代码如下所示: unique_count
Pandas.Index
),该变量包含我要从数据帧中删除的列的标签,并且工作正常。它是索引类型,因为我是根据数据帧本身的特定条件提取列名的
之后,我需要向该列表中添加另一个列名,因此我将Index对象转换为Python列表,以便附加额外的标签名。但是,在将列表作为columns参数传递给数据帧上的drop()
方法时,我现在不断得到错误:
ValueError:需要指定至少一个“标签”、“索引”或“列”
如何解决此错误
我使用的代码如下所示:
unique_count = df.apply(pd.Series.nunique)
redundant_columns = unique_count[unique_count == 1].index.values.tolist()
redundant_columns.append('DESCRIPTION')
print(redundant_columns)
df.drop(columns=redundant_columns, inplace=True)
Out: None
我找到了发生错误的原因。在
append()
语句之后,冗余列
将变成None
。我不知道为什么。如果有人能解释为什么会发生这种情况,我会很高兴的。对我来说,你的解决方案很有效
通过以下方式删除列的另一种解决方案:
说明:
nunique
获取唯一值的长度,然后通过进行比较以确定是否不相等说明
更改为假
print (df.nunique())
A 1
C 6
D 5
DESCRIPTION 2
E 6
dtype: int64
mask = df.nunique().ne(1)
print (mask)
A False
C True
D True
DESCRIPTION True
E True
mask['DESCRIPTION'] = False
print (mask)
A False
C True
D True
DESCRIPTION False
E True
dtype: bool
尝试之后,通过使用numpy.ndarray而不是普通的Python列表解决了这个问题,尽管我不知道为什么 在我的试验中,使用普通Python列表给出ValueError、pandas.Index或包含标签的numpy.ndarray类型的对象工作正常。所以我使用了np.ndarray,因为它是可追加的 当前工作代码:
unique_count = df.apply(pd.Series.nunique)
redundant_columns: np.ndarray = unique_count[unique_count == 1].index.values
redundant_columns = np.append(redundant_columns, 'DESCRIPTION')
self.full_data.drop(columns=redundant_columns, inplace=True)
在初始化行中使用.remove时,我遇到了相同的错误:
myNewList = [i for i in myOldList].remove('Last Item')
myNewList将变成none类型。在单独的列中使用.tolist()可能会帮助您:
redundant_columns = unique_count[unique_count == 1].index.values
redundant_columns.tolist()
redundant_columns.append('DESCRIPTION')
L=['col1','col2']
然后drop(L)
不起作用?你能演示一下如何使用删除吗?嗯,不幸的是,我不能模拟它,所以不知道如何解决它。问题应该在数据或pandas/python中。@jezrael这是一个很好的解决方案,为什么要删除它?我正在等待,稍后会将答案标记为已接受。我只认为您不感兴趣,但好吧,不要删除它。@jezrael我对您的解决方案感兴趣,非常优雅。我没有在我的代码中使用它,因为我试图尽可能避免复制,优化内存,这样我就不会耗尽内存。因此,我正在尽可能多地进行就地操作。@SushovanMandal-只需测试您的解决方案,并且工作良好:(你能描述一下你上面的解决方案吗?@SushovanMandal-当然,给我一点时间。谢谢。但是我发布的有问题的代码仍然不起作用。我在中间给出了一个打印语句,多余的\u列
在之后变成了无
。.append()语句。为什么会这样?@SushovanMandal-这真的很奇怪,你能检查一下这个L=[1,4]L.append(7)print(L)
?
redundant_columns = unique_count[unique_count == 1].index.values
redundant_columns.tolist()
redundant_columns.append('DESCRIPTION')