正在寻找用于清理/注释大型数据集的python数据结构

正在寻找用于清理/注释大型数据集的python数据结构,python,pandas,iterator,bigdata,Python,Pandas,Iterator,Bigdata,我正在对非常大的推特数据集~5000万条消息进行大量清理、注释和简单转换。我正在寻找一种数据结构,它可以像pandas那样包含列信息,但是可以与迭代器一起工作,而不是一次将整个数据集读入内存。我正在考虑写我自己的,但我想知道是否有类似的功能。我知道我不是唯一一个这样做的人 所需功能: >>> ds = DataStream.read_sql("SELECT id, message from dataTable WHERE epoch < 129845") >>

我正在对非常大的推特数据集~5000万条消息进行大量清理、注释和简单转换。我正在寻找一种数据结构,它可以像pandas那样包含列信息,但是可以与迭代器一起工作,而不是一次将整个数据集读入内存。我正在考虑写我自己的,但我想知道是否有类似的功能。我知道我不是唯一一个这样做的人

所需功能:

>>> ds = DataStream.read_sql("SELECT id, message from dataTable WHERE epoch < 129845")
>>> ds.columns
['id', 'message']
>>> ds.iterator.next()
[2385, "Hi it's me, Sally!"]
>>> ds = datastream.read_sql("SELECT id, message from dataTable WHERE epoch < 129845")
>>> ds_tok = get_tokens(ds)
>>> ds_tok.columns
['message_id', 'token', 'n']
>>> ds_tok.iterator.next()
[2385, "Hi", 0]
>>> ds_tok.iterator.next()
[2385, "it's", 1]
>>> ds_tok.iterator.next()
[2385, "me", 2]
>>> ds_tok.to_sql(db_info)

更新:我已经决定使用dict迭代器和pandas数据帧的组合来满足这些需求。

如前所述,有一个chunksize参数,这意味着您可以逐段处理sql结果。我可能会使用HDF5Store来保存中间结果。。。或者您可以将其追加回另一个sql表

dfs = pd.read_sql(..., chunksize=100000)
store = pd.HDF5Store("store.h5")
for df in dfs:
    clean_df = ...  # whatever munging you have to do
    store.append("df", clean_df)
请参阅其中一个文档,或

dfs = pd.read_sql(..., chunksize=100000)
for df in dfs:
    clean_df = ...
    clean_df.to_sql(..., if_exists='append')

请参阅文档的开头。

fwiw,您不必一次将其全部读入内存。你可以使用chunk_size,例如,你看到这个了吗?谢谢你的链接!我在read\u sql中没有看到任何选项可以为我提供迭代器:/read\u sql也有chunksize:很好。谢谢。那么,在实践中用大熊猫阅读chunksize=1的东西会不会效率低下呢?@Selah那太糟糕了。Chunksize需要相当大的IIRC最小50000是一个很好的经验法则。但请尝试几个不同的值,并与%timeit进行比较。