要删除DataFrame中的列,我可以成功使用:

del df['column_name']

但为什么我不能使用以下选项?

del df.column_name

由于可以通过df.column_name访问该系列,所以我希望这能奏效。


当前回答

如果原始数据帧df不太大,没有内存限制,只需要保留几列,或者,如果事先不知道不需要的所有额外列的名称,那么不妨创建一个只包含所需列的新数据帧:

new_df = df[['spam', 'sausage']]

其他回答

正如您所猜测的,正确的语法是

del df['column_name']

由于Python中的语法限制,很难使del df.column_name正常工作。deldf[name]被翻译成df__delitem__(name)在Python的封面下。

点语法在JavaScript中有效,但在Python中无效。

Python:del df['column_name]JavaScript:del df['column_name]或del df.column_name

Use:

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

或者你可以和

del df['colname']

基于列编号删除多个列的步骤

df.drop(df.iloc[:,1:3], axis = 1, inplace = True)

基于列名删除多个列的步骤

df.drop(['col1','col2',..'coln'], axis = 1, inplace = True)

Pandas 0.21+答案

Pandas 0.21版略微更改了drop方法,以包括索引和列参数,以匹配重命名和重新索引方法的签名。

df.drop(columns=['column_a', 'column_c'])

就我个人而言,我更喜欢使用axis参数来表示列或索引,因为它是几乎所有panda方法中使用的主要关键字参数。但是,现在您在0.21版中增加了一些选择。

一个很好的补充是,只有列存在时才可以删除它们。这样,您可以覆盖更多的用例,并且它只会从传递给它的标签中删除现有列:

例如,只需添加errors='ignore':

df.drop(['col_name_1', 'col_name_2', ..., 'col_name_N'], inplace=True, axis=1, errors='ignore')

这是熊猫0.16.1以后的新版本。文档在这里。