【问题标题】:How to delete a column from a data frame with pandas?如何使用熊猫从数据框中删除列?
【发布时间】:2015-03-18 02:53:07
【问题描述】:

我读取了我的数据

import pandas as pd
df = pd.read_csv('/path/file.tsv', header=0, delimiter='\t')
print df

然后得到:

          id    text
0    361.273    text1...
1    374.350    text2...
2    374.350    text3...

如何从上述数据框中删除id 列?我尝试了以下方法:

import pandas as pd
df = pd.read_csv('/path/file.tsv', header=0, delimiter='\t')
print df.drop('id', 1)

但它引发了这个异常:

ValueError: labels ['id'] not contained in axis

【问题讨论】:

  • df.columns 报告的列名是什么?也许列名中有空格?
  • Index([u'id opinion'], dtype='object') 谢谢回复
  • 需要注意的一点,你真的需要删除列吗?您可以通过执行df['text'] 或更一般地df[some_list] 从df 中仅选择感兴趣的列,此外,如果您一开始就不需要它,请不要加载它df = pd.read_csv('/path/file.tsv', header=0, delimiter='\t', usecols=[0])
  • 我也想删除。但这是一个展示的问题,因为当你实际制作报告时。最好在之前旋转框架还是只删除 de 列?
  • 只是为了完整性df.drop(['id'],1)作品

标签: python python-2.7 pandas csv io


【解决方案1】:

df.drop(colname, axis=1)(或del df[colname])是删除列的正确方法。

如果出现ValueError,则表示列名与您想象的不完全一致。

检查 df.columns 以查看 Pandas 认为的列名称。

【讨论】:

    【解决方案2】:

    实际删除列

    如果传递的列完全匹配,del df['id']df.drop('id', 1) 应该可以工作

    但是,如果您不需要删除该列,那么您可以像这样选择感兴趣的列:

    In [54]:
    
    df['text']
    Out[54]:
    0    text1
    1    text2
    2    textn
    Name: text, dtype: object
    

    如果您一开始就不想使用它,那么您将 cols 列表作为参数传递给 read_csv usecols

    In [53]:
    import io
    temp="""id    text
    363.327    text1
    366.356    text2
    37782    textn"""
    df = pd.read_csv(io.StringIO(temp), delimiter='\s+', usecols=['text'])
    df
    Out[53]:
        text
    0  text1
    1  text2
    2  textn
    

    关于您的错误,这是因为 'id' 不在您的列中,或者拼写不同或有空格。要检查这一点,请查看 print(df.columns.tolist()) 的输出,这将输出列列表,并显示您是否有任何前导/尾随空格。

    【讨论】:

    • 问题是如何删除一列。这是一个有效的问题,此答案未解决。我不是反对者。
    • @TimD 问题的上下文是 OP 想要删除他们不感兴趣的列,我的回答表明,首先,如果您只想使用特定列或实际上,您可能只是不阅读该专栏或只阅读感兴趣的专栏,并且 OP 接受了答案
    • 您确实已经解决了 OP 遇到的问题,这从上下文中可以看出。我从谷歌搜索中找到了这个问题,寻找删除列的方法。在 我的 上下文中,这个答案对我没有帮助,因为我不知道 先验 在我阅读它们之前我需要哪些列。您可能已经解决了 OP 问题,但我敢打赌,该页面的后续访问者会寻找 DataFrame.drop() 并支持提出该问题的答案。
    • @TimD 我现在添加了附加信息以及如何调试此问题
    【解决方案3】:

    在 pandas 中删除列的最佳方法是使用drop

    df = df.drop('column_name', axis=1)
    

    其中1 编号(0 表示行,1 表示列。)

    要删除列而不必重新分配df,您可以这样做:

    df.drop('column_name', axis=1, inplace=True)
    

    最后,要按列 number 而不是按列 label 删除,试试这个。 删除,例如第 1、2、4 列:

    df.drop(df.columns[[0, 1, 3]], axis=1)  # df.columns is zero-based pd.Index 
    


    例外:

    如果请求的列号或标签错误,则会引发错误。 要检查列数,请使用df.shape[1]len(df.columns.values),要检查列标签,请使用df.columns.values

    将引发异常 答案基于@LondonRob 的answer 并留在这里以帮助该页面的未来访问者。

    【讨论】:

      猜你喜欢
      • 2021-09-10
      • 1970-01-01
      • 2020-05-28
      • 2018-03-15
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      相关资源
      最近更新 更多