要删除DataFrame中的列,我可以成功使用:
del df['column_name']
但为什么我不能使用以下选项?
del df.column_name
由于可以通过df.column_name访问该系列,所以我希望这能奏效。
要删除DataFrame中的列,我可以成功使用:
del df['column_name']
但为什么我不能使用以下选项?
del df.column_name
由于可以通过df.column_name访问该系列,所以我希望这能奏效。
当前回答
使用数据帧和切片的iloc函数删除列,当我们有一个带有不需要的值的典型列名时:
df = df.iloc[:,1:] # Removing an unnamed index column
这里0是默认行,1是第一列,因此:,1:是删除第一列的参数。
其他回答
总是使用[]符号是一个很好的做法。一个原因是属性表示法(df.column_name)不适用于编号索引:
In [1]: df = DataFrame([[1, 2, 3], [4, 5, 6]])
In [2]: df[1]
Out[2]:
0 2
1 5
Name: 1
In [3]: df.1
File "<ipython-input-3-e4803c0d1066>", line 1
df.1
^
SyntaxError: invalid syntax
按索引删除
删除第一列、第二列和第四列:
df.drop(df.columns[[0,1,3]], axis=1, inplace=True)
删除第一列:
df.drop(df.columns[[0]], axis=1, inplace=True)
此处有一个可选参数可以在不创建副本的情况下修改数据。
被逮捕的
列选择、添加、删除
删除列列名:
df.pop('column-name')
示例:
df = DataFrame.from_items([('A', [1, 2, 3]), ('B', [4, 5, 6]), ('C', [7,8, 9])], orient='index', columns=['one', 'two', 'three'])
打印df:
one two three
A 1 2 3
B 4 5 6
C 7 8 9
df.drop(df.columns[[0],axis=1,inplace=True)打印df:
two three
A 2 3
B 5 6
C 8 9
三=df.pop(“三”)打印df:
two
A 2
B 5
C 8
一个很好的补充是,只有列存在时才可以删除它们。这样,您可以覆盖更多的用例,并且它只会从传递给它的标签中删除现有列:
例如,只需添加errors='ignore':
df.drop(['col_name_1', 'col_name_2', ..., 'col_name_N'], inplace=True, axis=1, errors='ignore')
这是熊猫0.16.1以后的新版本。文档在这里。
从Python的一般观点来看,如果可以删除属性column_name,del obj.column_name是有意义的。它需要是一个常规属性,或者是一个定义了删除器的属性。
这不适用于Pandas,也不适用于Pandas数据帧的原因如下:
考虑df.column_name是一个“虚拟属性”,它本身不是一个东西,它不是该列的“座位”,它只是访问该列的一种方式。很像没有删除器的属性。
Use:
columns = ['Col1', 'Col2', ...]
df.drop(columns, inplace=True, axis=1)
这将在位删除一个或多个列。请注意,inplace=True是在panda v0.13中添加的,在旧版本中不起作用。在这种情况下,您必须重新分配结果:
df = df.drop(columns, axis=1)