【问题标题】:python del vs pandas droppython del vs pandas drop
【发布时间】:2018-05-05 16:24:22
【问题描述】:

我知道这可能是老生常谈,但在 pandas.droppython del 函数中,哪个在性能方面优于大型数据集?

我正在使用 python 3 学习机器学习,但不确定该使用哪一个。我的数据采用pandas 数据框格式。但是python del 函数在built-in function for python。

【问题讨论】:

  • 我会建议使用drop,因为它很容易实现一次drop多列。 df.drop(['A','B'])
  • @Wen 实现多列 drop 不是我关心的问题,但对于较大的数据集,如果我只需要删除一列,drop 会比 del 表现更好,反之亦然?
  • @Greg 这就是我正在搜索的内容。非常感谢..我猜删除会从数据帧中释放一些内存,而删除只会在隐藏删除的列的同时返回数据帧,是对还是我缺少什么?
  • @sagarjain 你可以通过传递df.drop(<whatever>, inplace=True) 使.drop 方法就地工作。我认为不会有性能差异。如果您是古玩,就不能进行测试吗?

标签: python python-3.x pandas


【解决方案1】:

在 10Mb 的股票数据上进行测试,得到以下结果:

使用以下代码删除

t=time.time()
d.drop(labels="2")
print(time.time()-t)

0.003617525100708008

for del 与同一列中的以下代码:

t=time.time()
del d[2]
print(time.time()-t)

我得到的时间是:

0.0045168399810791016

在不同的数据集和列上重新运行没有任何显着差异

【讨论】:

    【解决方案2】:

    在使用“inplace=False”的 drop 方法中,您可以选择创建子集 DF 并保持不接触原始 DF,但在 del 中,我相信此选项不可用。

    【讨论】:

      【解决方案3】:

      使用大约 1.6 GB 的随机生成数据,df.drop 似乎比del 快,尤其是在多列上:

      df = pd.DataFrame(np.random.rand(20000,10000))
      t_1 = time.time()
      df.drop(labels=[2,4,1000], inplace=True)
      t_2 = time.time()
      print(t_2 - t_1)
      

      0.9118959903717041

      相比:

      df = pd.DataFrame(np.random.rand(20000,10000))
      t_3 = time.time()
      del df[2]
      del df[4]
      del df[1000]
      t_4 = time.time()
      print(t_4 - t_3)
      

      4.052732944488525

      @Inder 的比较不太一样,因为它没有使用inplace=True

      【讨论】:

        【解决方案4】:

        总结关于功能的几点:

        • drop 对列和行都进行操作; del 仅对列进行操作。
        • drop可以一次操作多个项目; del 一次只能操作一个。
        • drop 可以就地操作,也可以返回一份; del 仅是就地操作。

        https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop.html 的文档有更多关于 drop 功能的详细信息。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-12-05
          • 2011-08-02
          • 2019-09-28
          • 2013-02-04
          • 2019-04-18
          • 1970-01-01
          • 2018-03-01
          相关资源
          最近更新 更多