如何使用pandas从数据框中删除列?

时间:2015-01-20 00:22:23

标签: 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 = pd.read_csv('/path/file.tsv', header=0, delimiter='\t')
print df.drop('id', 1)

但它提出了这个例外:

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

3 个答案:

答案 0 :(得分:53)

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

如果引发ValueError,则表示列名不完全符合您的想法。

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

答案 1 :(得分:32)

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

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

其中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的answer,并留在此处以帮助此页面的未来访问者。

答案 2 :(得分:13)

要实际删除列

如果传递的列完全匹配

,则

del df['id']df.drop('id', 1)应该有效

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

In [54]:

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

如果您从未想过它,那么您将列表列表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())的输出,请输出列的列表,并显示是否有任何前导/尾随空格。