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

我读了我的数据

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
newWithPython asked 2020-08-08T17:24:12Z
3个解决方案
53 votes

df.columns(或del df[colname])是删除列的正确方法。

如果引发df.columns,则表示列名与您认为的不完全相同。

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

unutbu answered 2020-08-08T17:25:06Z
34 votes

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

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

其中df.shape[1]是轴编号(行为len(df.columns.values),列为df.columns.values。)

要删除该列而不必重新分配df.shape[1],您可以执行以下操作:

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

最后,要按列号而不是按列标签删除,请尝试此操作。删除,例如 第一,第二和第四列:

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的答案,并留在此处以帮助此页面的将来访问者。

borgr answered 2020-08-08T17:25:53Z
15 votes

实际删除列

如果传递的列完全匹配,则del df['id']'id'应该已经起作用

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

In [54]:

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

如果您一开始就不想使用它,则可以将cols列表作为参数print(df.columns.tolist())传递给'id'

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())的输出,这将输出列的列表,并显示您是否有任何前导/尾随空格。

EdChum answered 2020-08-08T17:24:37Z
translate from https://stackoverflow.com:/questions/28035839/how-to-delete-a-column-from-a-data-frame-with-pandas