我有一个巨大的SQLite数据库,当读入一个大块熊猫会导致内存错误。解决通常的方法是设置一个chunksize
参数:跨大块熊猫填充
db = 'rawdb.sqlite'
conn = sqlite3.connect(db)
SQL = 'SELECT * FROM Table'
df = pd.read_sql(SQL, conn, chunksize=10000)
我试图清理在数据库中的数据(2密耳行×141列),通过:
- 删除任何一行超过32个
NaN
值 - 正向填不下降
我可以提取我所需要的数据,如果它是一个唱行的所有其他NaN
值乐块:
df[~(df.isnull().sum(axis=1) > 32)].fillna(method='ffill')
如何跨越块做到这一点?具体而言,由于chunksize = 10000
,下一块将会从10001点的数据开始,如果行10001恰好包含NaN
值,行不掉线,这是假设从行10000
但是到ffill,行10000在前面的块中,所以没有提及填充。这会导致行10001 NaN
值未被填充。什么是模板算法来解决这类问题?
为什么在阅读完所有大块后最后两个步骤不干净? – Parfait
现在你的问题得到了解答,你能回答我的问题吗?性能问题是不是最后清理? – Parfait
这不是性能问题。你无法将整个文件读入内存中,因为它太大了,所以你可以通过分块读取它们,操纵并存储它,卸载当前块并读取下一个文件。 – Yeile