目录
思路一:分而治之
思路二:精简数据
demo
思路一:分而治之
分而治之,分批次加载大文件,每次读取一定行数的数据,读一批处理一批。
此方法简单有效,易实现,但可能适用性不高,因为有些场景就是要加载全部数据。
例如read_csv函数里的参数:chunksize 和 iterator。
chunksize用于指定每次加载的行数。iterator是用于打开获取迭代对象的开关。
官方文档没有实例代码,我会在demo里补充。
官方文档路径:pandas.read_csv — pandas 1.4.0 documentation
思路二:精简数据
1、使用usecols参数按需指定要加载的列,过滤用不到的列,大大降低内存。
2、指定每列数据类型,尽量使用占用字节小的数据类型。【高阶技能】这个另开一篇讲解。pandas的内存使用_Talk is cheap. Show me the code-CSDN博客调用 info() 时会显示 DataFrame 的内存使用情况(包括索引)https://blog.csdn.net/haohaizijhz/article/details/122722847
3、替换愿文件里的空值为默认值,再加载。如果存在空值,容易导致第2步指定的数据类型失效。
can'kaocan'kacan'kcancacpandas空值类型提升 NaN类型提升_Talk is cheap. Show me the code-CSDN博客
此方法第一步简单有效,易实现;第二步比较精细,需要耐心;第三步需要注意,需要时时检查空值情况。
demo
chunksize = 1 * 10 ** 7 # 每1千万行处理一次数据
reader = pd.read_csv(a_BIG_input_file, encoding = 'utf-8', iterator=True, chunksize=chunksize)
chunk_num = 0
for chunk in reader:
print("Chunk: " + str(chunk_num) + ' >'*30 + '\n')
df = chunk
diy_fun_process_1(df)
diy_fun_process_1(df)
chunk_num += 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)