Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Getting ValueError:需要指定至少一个';标签'';指数';或';列';将标签列表传递为';列';drop()方法的参数_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

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')