【问题标题】:Alternative for drop_duplicates python 3.6drop_duplicates python 3.6的替代方案
【发布时间】:2018-06-09 08:19:08
【问题描述】:

我正在处理大量数据,大约 5000 万行。 我想从多列中找到唯一的列值。我使用下面的脚本。

dataAll[['Frequency', 'Period', 'Date']].drop_duplicates()

但这需要很长时间,超过 40 分钟。

我找到了一些替代方案:

pd.unique(dataAll[['Frequency', 'Period', 'Date']].values.ravel('K'))

但上面的脚本会给出数组,但我需要在数据框中像第一个脚本一样给出如下

【问题讨论】:

  • 您可以维护一个 Python set 元组标签 FrequencyPeriodDate,遍历行并检查/更新集合的成员资格。除了元组创建之外,这应该与行数大致呈线性关系。但是,如果 pandas 没有对他们的 drop_duplicates 采取类似的方法,我会感到惊讶。

标签: python python-3.x pandas dataframe unique


【解决方案1】:

一般来说,您的新代码不可能转换为DataFrame,因为:

pd.unique(dataAll[['Frequency', 'Period', 'Date']].values.ravel('K'))

创建一个大的1d numpy array,因此删除重复项后不可能重新创建行。

例如如果有 2 个唯一值 31 是不可能找到 31 的日期时间。


但如果Frequency 只有一个唯一值,并且每个Period 都可以找到Date,就像在示例中一样,那么解决方案是可能的。

编辑:

一种可能的替代方法是使用dask.dataframe.DataFrame.drop_duplicates

【讨论】:

  • 谢谢...还有其他选择吗?我需要提高脚本的性能
  • 频率包含不同日期的0,1,2,3,4,5,6。
  • 能否请您提供“期间”、“日期”的解决方案 - 只有 2 列
  • @faithon.gvr.py - 5000 万是非常庞大的数据框。我建议在具有大量 RAM 的服务器上工作,另外一些像 dask 这样的库应该会有所帮助。 this 的一些想法也应该有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-29
  • 2021-04-13
  • 2011-02-09
相关资源
最近更新 更多