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

new*_*hon 42 python csv io python-2.7 pandas

我读了我的数据

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

得到:

          id    text
0    361.273    text1...
1    374.350    text2...
2    374.350    text3...
Run Code Online (Sandbox Code Playgroud)

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

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

但它引发了这个例外:

ValueError: labels ['id'] not contained in axis
Run Code Online (Sandbox Code Playgroud)

unu*_*tbu 53

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

如果ValueError引发a,则表示列名称与您的想法不完全相同.

检查df.columnsPandas认为列的名称是什么.


bor*_*rgr 34

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

df = df.drop('column_name', axis=1)
Run Code Online (Sandbox Code Playgroud)

其中1数(0行和1列的).

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

df.drop('column_name', axis=1, inplace=True)
Run Code Online (Sandbox Code Playgroud)

最后,要按列而不是列标签,请尝试此操作.要删除,例如第1列,第2列和第4列:

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


例外:

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

将提出一个例外答案是基于@LondonRob的答案,并留在这里以帮助此页面的未来访问者.


EdC*_*ica 15

要实际删除列

del df['id']或者df.drop('id', 1)如果传递的列完全匹配应该有效

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

In [54]:

df['text']
Out[54]:
0    text1
1    text2
2    textn
Name: text, dtype: object
Run Code Online (Sandbox Code Playgroud)

如果您从未想过它,那么您将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
Run Code Online (Sandbox Code Playgroud)

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

  • 问题是如何删除列.这是一个有效的问题,在这个答案中没有提到.我不是倒下的人. (8认同)
  • 你确实已经解决了OP的问题,这从背景中可以看出.我从谷歌搜索中寻找了一种删除列的方法.在_my_上下文中,这个答案对我没有帮助,因为我不知道_a priori_在读完之前我需要哪些列.您可能已经解决了OP问题,但我打赌该页面的后续访问者将寻找`DataFrame.drop()`并提出答案. (3认同)
  • @TimD 我现在添加了附加信息以及如何调试这个问题 (2认同)