我正在尝试在计算机上加载具有以下功能的4 GB大小的.csv文件:1.25亿行和5种类型的数据:


CPU:Intel Core 2 Duo E7200 @ 2.53 GHz
内存:8 GB DDR3 @ 1833 MHz
高清:500 GB 7200 rpm
操作系统:Ubuntu 16.04


当我运行此代码时:

import dask.dataframe as dd
import numpy as np

dtypes = {'item_nbr':'int32', 'store_nbr':'int8', 'onpromotion':'bool' }
df_train = dd.read_csv('data/train.csv', dtype=dtypes, parse_dates=["date"],
converters={'unit_sales': lambda u: np.log1p(float(u)) if float(u) > 0 else 0},
usecols=[1, 2, 3, 4, 5]).compute()


我的电脑死机了,我需要重新启动它,这个问题有解决方案吗?

谢谢!

版:

目前,我正在尝试运行:df_train.unit_sales.map_partitions(np.log1p).compute()
而且我的PC仍然冻结,那么,如何在不冻结PC的情况下计算所有1.25亿行的对数?而且,我该如何检查调用compute是否安全?

最佳答案

如评论中所述,当您在快速数据帧上调用.compute()时,您的意思是“我现在完成了,请把它变成熊猫对象”

在您的情况下,您可能不想立即执行此操作,而是要在执行其他查询,聚合等之后执行此操作。



df = dd.read_csv('lots-of-data-*.csv')
df = df.compute()  # this is very large and may not fit in memory




df = dd.read_csv('lots-of-data-*.csv')
df = df[df.value > 0]
result = df.groupby('name').value.mean()
result = result.compute()  # this is probably much smaller

关于python - 在read_csv上加载并应用函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49196780/

10-11 08:35