要删除DataFrame中的列,我可以成功使用:
del df['column_name']
但为什么我不能使用以下选项?
del df.column_name
由于可以通过df.column_name访问该系列,所以我希望这能奏效。
要删除DataFrame中的列,我可以成功使用:
del df['column_name']
但为什么我不能使用以下选项?
del df.column_name
由于可以通过df.column_name访问该系列,所以我希望这能奏效。
当前回答
点语法在JavaScript中有效,但在Python中无效。
Python:del df['column_name]JavaScript:del df['column_name]或del df.column_name
其他回答
从Python的一般观点来看,如果可以删除属性column_name,del obj.column_name是有意义的。它需要是一个常规属性,或者是一个定义了删除器的属性。
这不适用于Pandas,也不适用于Pandas数据帧的原因如下:
考虑df.column_name是一个“虚拟属性”,它本身不是一个东西,它不是该列的“座位”,它只是访问该列的一种方式。很像没有删除器的属性。
总是使用[]符号是一个很好的做法。一个原因是属性表示法(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
Pandas 0.21+答案
Pandas 0.21版略微更改了drop方法,以包括索引和列参数,以匹配重命名和重新索引方法的签名。
df.drop(columns=['column_a', 'column_c'])
就我个人而言,我更喜欢使用axis参数来表示列或索引,因为它是几乎所有panda方法中使用的主要关键字参数。但是,现在您在0.21版中增加了一些选择。
正如您所猜测的,正确的语法是
del df['column_name']
由于Python中的语法限制,很难使del df.column_name正常工作。deldf[name]被翻译成df__delitem__(name)在Python的封面下。
我们可以通过drop()方法删除或删除一个或多个指定列。
假设df是一个数据帧。
要删除的列=列0
代码:
df = df.drop(column0, axis=1)
要删除多个列col1、col2、,coln,我们必须在列表中插入所有需要删除的列。然后通过drop()方法删除它们。
代码:
df = df.drop([col1, col2, . . . , coln], axis=1)