python - Python - 处理后将块列表放入数据帧
问题描述
我正在使用块函数为 ML 预处理我的数据,因为我的数据相当大。
数据处理后,我试图将处理后的数据作为新列“块”添加回原始数据帧,这给了我一个内存错误,所以我试图一次将块加载到数据帧中,但我仍然得到一个内存错误:
MemoryError: Unable to allocate array with shape (414, 100, 32765) and data type float64
这是我的数据:
Antibiotic ... Genome
0 isoniazid ... ccctgacacatcacggcgcctgaccgacgagcagaagatccagctc...
1 isoniazid ... gggggtgctggcggggccggcgccgataaccccaccggcatcggcg...
2 isoniazid ... aatcacaccccgcgcgattgctagcatcctcggacacactgcacgc...
3 isoniazid ... gttgttgttgccgagattcgcaatgcccaggttgttgttgccgaga...
4 isoniazid ... ttgaccgatgaccccggttcaggcttcaccacagtgtggaacgcgg...
这是我当前的代码:
lookup = {
'a': 0.25,
'g': 0.50,
'c': 0.75,
't': 1.00,
'A': 0.25,
'G': 0.50,
'C': 0.75,
'T': 1.00
# z: 0.00
}
dfpath = 'C:\\Users\\CAAVR\\Desktop\\Ison.csv'
dataframe = pd.read_csv(dfpath, chunksize=100)
chunk_list = []
def preprocess(chunk):
processed_chunk = chunk['Genome'].apply(lambda bps: pd.Series([lookup[bp] if bp in lookup else 0.0 for bp in bps.lower()])).values
return processed_chunk;
for chunk in dataframe:
chunk_filter = preprocess(chunk)
chunk_list.append(chunk_filter)
chunk_array = np.asarray(chunk_list)
for chunk in chunk_array:
dataframe1 = dataframe.copy()
dataframe1["Chunk"] = chunk_array
dataframe1.to_csv(r'C:\\Users\\CAAVR\\Desktop\\chunk.csv')
如果您需要更多信息,请告诉我。谢谢
解决方案
我建议不要将内存中的所有块组合在一起,这只会让您回到内存不足的问题,而是建议单独写出每个块。
如果您以附加模式 ( f = open('out.csv', 'a')
) 打开文件,则可以执行dataframe.to_csv(f)
多次。第一次它会写入列,以后的调用会这样做,dataframe.to_csv(f, header=False)
因为您之前已经编写了列标题。
推荐阅读
- python - PyQT5的OpenGL FrameBuffer离屏、在屏渲染问题
- broadleaf-commerce - 我的阔叶商务管理视图的功能少于现场演示中的功能
- c# - 通过按钮单击事件复制 DataGridView
- python-3.x - 如何仅在 django 主页上添加到购物车后才显示过滤的项目?
- sql - 我有这个查询来获取统计信息,但是从 1M 条记录中返回结果需要 10 多秒。我该如何优化它?
- google-apps-script - 根据所选工作表在侧边栏下拉列表中获取列标题
- vba - 如何从 Outlook vba 中的共享邮箱接收/发送电子邮件?
- node.js - 使用 axios 进行内部 API 调用
- python-3.x - 如何将一个文件拆分为 2 个小文件 tkinter gui?
- python - 是否将其设为静态方法....这是个问题