Python 如何使用熊猫从数据框中删除列?

Python 如何使用熊猫从数据框中删除列?,python,python-2.7,pandas,csv,io,Python,Python 2.7,Pandas,Csv,Io,我读我的数据 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 =

我读我的数据

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.drop(colname,axis=1)
(或
del df[colname]
)是删除列的正确方法

如果出现
ValueError
,则表示列名与您认为的不完全相同


选中
df.columns
查看列的名称。

实际删除列

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

但是,如果不需要删除该列,则可以选择感兴趣的列,如下所示:

In [54]:

df['text']
Out[54]:
0    text1
1    text2
2    textn
Name: text, dtype: object
如果您一开始就不想要它,那么您可以将col列表作为参数
usecols
传递给
read_csv

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'
不在您的列中,或者它的拼写不同,或者有空格。要检查这一点,请查看打印(df.columns.tolist())的输出。这将输出列的列表,并显示是否有任何前导/尾随空格。

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

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

要删除该列而不必重新分配
df
,可以执行以下操作:

df.drop('column_name', axis=1, inplace=True)
最后,要按列编号而不是按列标签拖放,请尝试以下操作。 要删除,例如第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的,留在这里是为了帮助本页的未来访问者。

df.columns作为列名报告了什么?也许列名中有空格?
索引([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 column之前旋转框架还是只删除de column?只是为了完整性
df.drop(['id'],1)
works问题是如何删除列。这是一个有效的问题,但在本答案中没有提及。我不是落选者。@TimD问题的背景是OP想要删除一个他们不感兴趣的专栏,我的回答表明,首先,如果你只想使用一个特定的专栏,或者你实际上可以不阅读该专栏,或者只阅读感兴趣的专栏,而OP接受了答案,那么这是没有必要的。你确实解决了OP遇到的问题,这从上下文中可以看出。我在一次谷歌搜索中发现了这个问题,寻找一种删除该列的方法。在我的上下文中,这个答案对我没有帮助,因为我不知道在读完之前我需要哪些专栏。您可能已经解决了OP问题,但我敢打赌,该页面的后续访问者将查找
DataFrame.drop()
和向上投票的答案,这些答案表示了该问题。@TimD我现在已经添加了附加信息,以及如何调试此问题
df.drop(df.columns[[0, 1, 3]], axis=1)  # df.columns is zero-based pd.Index