为 cleaning/annotating 大型数据集寻找 python 数据结构

Looking for a python datastructure for cleaning/annotating large datasets

我正在对非常大的 Twitter 数据集(约 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 数据帧的组合来满足这些需求。

正如所评论的那样,read_sql 有一个 chunksize 参数,这意味着您可以零碎地处理 sql 结果。我可能会使用 HDF5Store 来保存中间结果......或者你可以将它附加回另一个 sql table.

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)

(参见文档的 hdf5 section),或

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

请参阅文档的 sql section