删除pandas中列的最佳方法是什么

Moh*_* ah 11 python dataframe pandas

我正在为自学而提出这个问题.据我所知,以下是删除pandas数据帧中列的不同方法.

选项1:

df=pd.DataFrame({'a':[1,2,3,4,5],'b':[6,7,8,9,10],'c':[11,12,13,14,15]})
del df['a']
Run Code Online (Sandbox Code Playgroud)

选项-2:

df=pd.DataFrame({'a':[1,2,3,4,5],'b':[6,7,8,9,10],'c':[11,12,13,14,15]})
df=df.drop('a',1)
Run Code Online (Sandbox Code Playgroud)

选项-3:

df=pd.DataFrame({'a':[1,2,3,4,5],'b':[6,7,8,9,10],'c':[11,12,13,14,15]})
df=df[['b','c']]
Run Code Online (Sandbox Code Playgroud)
  1. 这些中最好的方法是什么?
  2. 有没有其他方法可以实现相同的目标?

YaO*_*OzI 12

按照文档:

DataFrame是一个二维标记数据结构,具有可能不同类型的列.

而且pandas.DataFrame.drop:

从行或列中删除指定的标签.

所以,我认为我们应该坚持下去df.drop.为什么?我认为专业人士是:

  1. 它使我们能够更好地控制删除操作:

    # This will return a NEW DataFrame object, leave the original `df` untouched.
    df.drop('a', axis=1)  
    # This will modify the `df` inplace. **And return a `None`**.
    df.drop('a', axis=1, inplace=True)  
    
    Run Code Online (Sandbox Code Playgroud)
  2. 它可以用它的args来处理更复杂的情况.例如level,我们可以处理MultiIndex删除.并且errors,我们可以防止一些错误.

  3. 它是一种更加统一和面向对象的方式.


就像@jezrael在他的回答中所说:

选项1:使用关键字del是一种有限的方式.

选项3:df=df[['b','c']]本质上甚至不是删除.它首先通过[]语法索引选择数据,然后df用原始DataFrame 解除绑定名称并将其与新的绑定(即df[['b','c']]).


小智 9

在 Pandas 数据框中删除列或行的推荐方法是使用 drop。

要删除列,

df.drop('column_name', axis=1, inplace=True)
Run Code Online (Sandbox Code Playgroud)

要删除一行,

df.drop('row_index', axis=0, inplace=True)
Run Code Online (Sandbox Code Playgroud)

您可以参考这篇文章以查看有关列删除方法的详细对话。