我正在尝试为我的数据集生成更多变量。我的数据存储在多个文件中,由于内存限制,使用pandas一次只能读取一个文件。每个csv文件都有一个月的数据,如下所示:
Index Date Sender Recipient Quantity Type
------------------------------------------------------------------------
79XT 26-03-19 Adam Tiffany 72 Box
57ZY 14-03-19 Josh Ross 13 Snack
29UQ 19-03-19 Adam Alex 60 Fruit
56PY 06-03-19 Lucy Alex 29 Book
41BR 28-03-19 Josh Steve 33 Snack
现在,我正试图根据每个发送者的历史为每一行生成更多的特性,并将这些特性连接到数据帧。例如:
Index Date Sender Recipient Quantity Type Days Since Days Since Cumulative Quantity Increase First Shipment
Previous Shipment First Shipment Quantity from Previous Shipment to This Recipient?
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
79XT 26-03-19 Adam Tiffany 72 Box 7 62 1792 12 0
57ZY 14-03-19 Josh Ross 13 Snack NaN NaN 13 NaN 1
29UQ 19-03-19 Adam Alex 60 Fruit 5 55 1730 -7 1
56PY 06-03-19 Lucy Alex 29 Book 23 32 88 -4 0
41BR 28-03-19 Josh Steve 33 Snack 14 14 46 20 1
从上面所需的数据框中可以看出,新变量是根据发送方以前的观察结果生成的。生成此类特征的计算成本最低的方法是什么?我需要从我的所有每月csv文件中获取信息,以收集此类数据。有超过200000个唯一的发送者,因此读取csv文件、为每个唯一的发送者生成数据框和csv文件并将这些数据与每月的csv文件合并需要数周的时间。我知道dask和分布式dask,但我想知道是否有一种更简单的方法来实现我要做的事情
我在你的问题中看到了多个子问题
.csv
作为备份。 您可以像这样df.to_feather("filename")
编写一个文件作为feather考虑用Pandas Docs: pd.Factorize()中描述的{{CD4}}来对字符串进行分解。我在这上面没有看到基准,但比较^ {CD5>}要比^ {CD6>}快。
<>最后,考虑建立一个小的SqLeTe3数据库,读取各个文件并存储它们。否则,获取第一个匹配项将是一件痛苦的事情,因为您必须不断覆盖旧值并多次执行计算代价高昂的操作
这里我有一个不同的方法。我会尽力的
csv
转换为parquet
(最终看到这个answer)更改dtypes
。至少或
processed
文件夹中李>现在您在每个
Sender=username
中都有许多文件,您应该将它们合并到一个文件中现在可以为每个
Sender=username
创建函数相关问题 更多 >
编程相关推荐