【问题标题】:Handling two large dataframes - issue when using np.isin处理两个大数据帧 - 使用 np.isin 时的问题
【发布时间】:2018-03-20 18:04:48
【问题描述】:

例子:

row=['12347','Van','18/01/2017']
npvalues = np.array([ ['12345','Bus','23/02/2017'],['12346','Truck','01/07/2017'],['12347','Van','18/01/2017']  ])
np.isin(row, npvalues)

所需输出:[True, True, True]

ValueError: 数组太大; arr.size * arr.dtype.itemsize 大于最大可能大小。

【问题讨论】:

  • array([ True, True, True], dtype=bool) .... np.version.version 1.13.3

标签: python pandas numpy


【解决方案1】:

将“行”变量转换为 np.array 而不是列表。

import numpy as np
row=['12347','Van','18/01/2017']
npvalues = np.array([ ['12345','Bus','23/02/2017'],['12346','Truck','01/07/2017'],['12347','Van','18/01/2017']  ])

row
Out[60]: ['12347', 'Van', '18/01/2017']

npvalues
Out[61]: 
array([['12345', 'Bus', '23/02/2017'],
       ['12346', 'Truck', '01/07/2017'],
       ['12347', 'Van', '18/01/2017']],
      dtype='<U10')

# Cast instead
row = np.asarray(row)
np.isin(row, npvalues)
Out[63]: array([ True,  True,  True], dtype=bool)

注意 - 我能够按原样运行您的代码,并获得所需的答案。

row=['12347','Van','18/01/2017']
npvalues = np.array([ ['12345','Bus','23/02/2017'],['12346','Truck','01/07/2017'],['12347','Van','18/01/2017']  ])
np.isin(row, npvalues)
Out[64]: array([ True,  True,  True], dtype=bool)

这是我的版本信息

import sys
sys.version
Out[71]: '3.6.4 |Anaconda, Inc.| (default, Mar 12 2018, 20:20:50) [MSC v.1900 64 bit (AMD64)]'
np.version.full_version
Out[67]: '1.13.3'

【讨论】:

  • 感谢您的快速回复。在小型数据框中使用时,我的代码运行良好。如果count大于5000会报错
  • 当哪个数组有 > 5000 个元素?不幸的是,当您使用 32 位时,您会更早遇到内存限制。您有哪些 RAM 可用于该过程?
  • npvalues > 5000。我使用的是 8GB 内存
  • 您有 64 位处理器吗?如果是这样,我强烈建议您卸载 32 位版本的 python 并安装 64 位。 stackoverflow.com/questions/18282867/… - 您将增加进程的净空,但显然仍有限制。
  • 有没有其他方法可以快速签入数据框。完成 500 条记录需要 50 秒
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
  • 2023-01-24
  • 2019-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多