Python按加载日期进行筛选

Python按加载日期进行筛选,python,pandas,Python,Pandas,我读过一些关于使用skiprows和chunk size等思想以增量方式加载CSV的帖子,但没有任何东西适合我的特定用例。理想情况下,我想要一个像下推谓词一样工作的东西 我有一个很大的csv(860万行),只想加载过去一周的数据。文件中有一个指定日期的字段,我当前正在加载整个df,然后按日期过滤。我不确定是否可以完全跳过加载旧记录,但这将是我的目标。这可行吗 编辑:以下是我使用的代码: import boto3 S3Client = boto3.client('s3','us-east-1')

我读过一些关于使用skiprows和chunk size等思想以增量方式加载CSV的帖子,但没有任何东西适合我的特定用例。理想情况下,我想要一个像下推谓词一样工作的东西

我有一个很大的csv(860万行),只想加载过去一周的数据。文件中有一个指定日期的字段,我当前正在加载整个df,然后按日期过滤。我不确定是否可以完全跳过加载旧记录,但这将是我的目标。这可行吗

编辑:以下是我使用的代码:

import boto3

S3Client = boto3.client('s3','us-east-1')

obj = S3Client.get_object(Bucket = 'bucket_name', Key = 'some_key')
df = pd.read_csv(io.BytesIO(obj['Body'].read()))

并且数据的格式如下所示:

|'Cust_ID'|'Type'|'Date_of_activity'|'Amount'|'Item_count'|'time_of_order'|
---------------------------------------------------------------------------
|1234     |OL    |12-12-2019        |1234    |10          |23:34          |
|5678     |IS    |12-12-2019        |8765    |50          |11:34          |
|9101     |OL    |12-13-2019        |1504    |17          |3:45           |
我为两个独立的CSV做这个,每个CSV都有大约800-1000万条记录

在加载数据帧后,我正在进行一些连接、过滤和聚合,这在pandas中比仅使用标准CSV模块要容易得多。我认为
chunk\u size
不起作用,因为从我所读到的内容来看,它实际上不允许我根据
'Date\u of\u activity'
进行过滤,它一次只加载一定数量的行

基本上,我们每周都会收到一份完整的历史数据转储,而实际上我们需要的只是前一周的订单

你可以用一个


它将只计算您明确告诉它的内容,而不需要将整个数据帧加载到内存。

加载所有数据然后过滤到Pandas中有什么不对?加载数据帧大约需要6分钟,因为它有大约1000万条记录,而我只需要大约120k条记录。只是想减少时间/成本文件/数据作为一个整体有多大?在做了一些思考和研究之后,我有几个问题要问你:你做过任何基准测试或分析吗?您写道,创建具有
块大小的迭代器不适合您的用例,为什么?我认为它非常适合解决这个问题。是否指定了所有列数据类型?你在做什么来解析日期本身?您是否尝试过
内存映射
选项?您是否考虑过使用basic
csv
模块而不是Pandas,因为您不需要后者的强大功能?我在前面写过,如果您能分享更多关于数据的信息,那就太好了。我要补充的是,拥有你的代码,甚至是其中的一部分,会有很大的帮助。总而言之,这是一个很好的问题,我希望它能有所帮助。关于这一主题的类似问题似乎大多有陈旧过时的答案。我希望能够尝试一系列不同的东西,并得出一个对很多人都有用的大而可靠的答案。你的意思是不需要将数据帧加载到内存中,对吗?这可能行得通。我正在尝试优化lambda函数,但我不确定dask在lambda中是否可行。我可以看看其他的AWSservices@DBA108642它应该适用于这个应用程序,特别是因为您是按日期分区的。加载dask数据帧,并像平常一样运行操作。如果date是您的索引,它可能会运行得更快。请参阅文档:@bwc数据以平面csv形式接收,因此它没有任何分区。@DBA108642说到这里,您可以共享部分数据吗?或者至少是一些有代表性的东西,这样我们才能更好地了解情况。