我读了我的数据
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
答案 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())
的输出,请输出列的列表,并显示是否有任何前导/尾随空格。