Python 是否可以在磁盘上存储拼花地板文件,同时追加并按索引检索行?

Python 是否可以在磁盘上存储拼花地板文件,同时追加并按索引检索行?,python,pandas,parquet,fastparquet,Python,Pandas,Parquet,Fastparquet,我有185个数据文件,总共包含3000万行。每两个都有两列;一个我想用作索引的整数,以及512个整数的列表 看起来是这样的 IndexID Ids 1899317 [0, 47715, 1757, 9, 38994, 230, 12, 241, 12228... 22861131 [0, 48156, 154, 6304, 43611, 11, 9496, 8982, 1... 2163410 [0, 26039, 41156, 227, 860, 3320, 6673, 260, 1..

我有185个数据文件,总共包含3000万行。每两个都有两列;一个我想用作索引的整数,以及512个整数的列表

看起来是这样的

IndexID Ids
1899317 [0, 47715, 1757, 9, 38994, 230, 12, 241, 12228...
22861131    [0, 48156, 154, 6304, 43611, 11, 9496, 8982, 1...
2163410 [0, 26039, 41156, 227, 860, 3320, 6673, 260, 1...
15760716    [0, 40883, 4086, 11, 5, 18559, 1923, 1494, 4, ...
12244098    [0, 45651, 4128, 227, 5, 10397, 995, 731, 9, 3...
数据太大,无法加载到内存中,但我想使用索引列表一次检索几百行

我从这篇评论中得到了使用拼花地板的建议。

我一直在看官方的拼花指南

快速拼花指南

但我似乎找不到任何方法来使用索引检索行,也找不到表是否存储在磁盘上,或者是否全部加载到内存中

这可能吗?如果是这样,我该怎么做

比如说

实木复合材料[2286113115760716]

[0,48156,154,6304,43611,11,9496,8982,1。。。 [0,40883,4086,11,5,18559,1923,1494,4


Parquet是一个不适合您的用例的柱状数据存储。如果您的目标是存储太大而无法放入内存的数据,但仍然能够一次检索行来处理,我建议您使用数据库

最简单的数据库是sqlite3,它内置于Python中。Sqlite数据库存储为文件,而不需要您设置数据库系统

在我们继续之前,您需要将列表列分解为512列,1使它们更易于使用,2我认为数据库系统不支持列表

下面是一个关于如何转储数据和检索所需行的简单示例:

创建要处理的示例数据 作为pd进口熊猫 将numpy作为np导入 df=pd.DataFrame 数据=np.random.randintlow=1,高=1000,大小=1000,3, 列=['a','b','c'], index=pd.Seriesrange1000,name='IndexID' 导入sqlite3 将数据帧写入数据库 使用sqlite3.connect'sqlite.db'作为连接: df.to_sql'data',con=conn,如果_exists='append' 上面的代码将df的内容转储到当前工作目录中名为sqlite.db的sqlite数据库中。请注意to_sql调用中的if_exists选项;如果要覆盖现有数据库,则需要将其更改为replace

如果要从同一工作目录检索特定行,可以运行以下操作。下面的示例检索第200到210个索引:

如何从数据库中读取数据 使用sqlite3.connect'sqlite.db'作为连接: `rowid`是sqlite查询中表示索引的关键字 查询=从rowid介于%d和%d之间的数据中选择*%200210 subset=pd.read\u sqlquery,con=conn 打印子集 这将打印以下内容 IndexID a b c 0 199 704 3 423 1 200 590 299 767 2 201 45 953 560 3 202 237 662 746 4 203 123 920 275 5 204 453 10 370 6 205 35 628 602 7 206 957 465 735 8 207 602 810 154 9 208 927 796 352 10 209 969 130 217 有关在sqlite3和pandas之间移动数据的更多信息,我建议阅读本文和