【问题标题】:how to perform cross join of two large pandas file in python如何在python中执行两个大熊猫文件的交叉连接
【发布时间】:2020-04-05 16:49:38
【问题描述】:

我正在尝试在 pandas 中执行尺寸为 3383*192 和 5587*1487 的两个 pandas 文件的交叉连接并收到:内存错误。 谁能指导我如何在 python 的 .csv 文件中执行交叉连接并获得完整的输出(在 python 中的批处理或使用整个数据集)

【问题讨论】:

  • 试用these 方法。
  • 请提供一些代码的最小示例
  • 也许这会有所帮助。 stackoverflow.com/questions/37756991/…您正在尝试加入两个非常大的数据框。 Python 可能无法处理它。
  • 尝试内连接,在两个 dfs 中使用恒定的标量值。您可以尝试 dask 以防问题仍然存在

标签: python pandas


【解决方案1】:

试试这个,

import pandas as pd
import numpy as np
import dask.dataframe as dd

sd = dd.from_pandas(df, npartitions=3)

df1 = pd.DataFrame(np.random.randint(0,100,size=(3383, 192)))
df2 = pd.DataFrame(np.random.randint(0,100,size=(5587, 1487)))
df1['key']=0
df2['key']=0


sd1 = dd.from_pandas(df1, npartitions=3)
sd2 = dd.from_pandas(df2, npartitions=3)


dd.merge(sd1, sd2, on=['key']).drop('key',1)

它在机器上工作(8Gb Ram,Ubuntu 机器)

解释:

  1. 将 pandas 数据帧转换为 dask 数据帧
  2. 在两个 dfs 中为名为 key 的新列分配常量值
  3. 执行合并操作

【讨论】:

  • 感谢您的帮助,因为我可以看到它使用的列数,但看不到它的编号。的行。你能帮我看看行数吗??
  • @MohamedThasinah 我正在尝试对大小为 (40000*50) 且具有 32 GB 内存的数据帧执行相同的操作,但出现错误。请在这里参考我的问题:stackoverflow.com/questions/62839389/…
【解决方案2】:

如果可能的话,在加入之前降低音量以减少音量,即

df['something'] = pd.to_numeric(df['something'], downcast='something')
df['some_category'] = df['some_category'].astype('categorical')
df['some_time_column'] = pd.to_datetime(df['to_datetime'])

在我的应用程序中,减少量可以达到初始容量的 30-60%,因此达到内存上限的可能性要低得多。

【讨论】:

    猜你喜欢
    • 2016-03-13
    • 2017-08-26
    • 1970-01-01
    • 2021-04-09
    • 2018-03-02
    • 2022-08-09
    • 1970-01-01
    • 2021-05-11
    相关资源
    最近更新 更多