处理后将Python块列表放入数据帧

2024-09-26 22:55:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用一个chunk函数来预处理我的ML数据,因为我的数据相当大

数据处理后,我试图将处理后的数据作为新列“chunk”添加回原始数据帧,这给了我一个内存错误,因此我试图一次将chunk加载到数据帧中,但仍然出现内存错误:

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')

如果你需要更多的信息,请告诉我。谢谢


Tags: csvto数据内存indataframefor错误
1条回答
网友
1楼 · 发布于 2024-09-26 22:55:16

与其将内存中的所有块组合在一起(这会让你回到内存不足的问题),我建议将每个块分别写出来

如果以追加模式(f = open('out.csv', 'a'))打开文件,可以多次执行dataframe.to_csv(f)。它第一次写入列时,稍后调用dodataframe.to_csv(f, header=False),因为您之前已经编写了列标题

相关问题 更多 >

    热门问题