Python-定义区块函数来编码基因组数据

Python-定义区块函数来编码基因组数据,python,pandas,preprocessor,chunks,Python,Pandas,Preprocessor,Chunks,我试图将基因组从存储在数据帧中的字符串编码为相应数值的数组 这是我的一些数据帧,因为某些原因,它没有给我所有的5列,只有2列: Antibiotic ... Genome 0 isoniazid ... ccctgacacatcacggcgcctgaccgacgagcagaagatccagctc... 1 isoniazid ... gggggtgctggcggggccggc

我试图将基因组从存储在数据帧中的字符串编码为相应数值的数组

这是我的一些数据帧,因为某些原因,它没有给我所有的5列,只有2列:

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
  # z: 0.00
}
我尝试使用以下方法直接应用此功能:

dataframe['Genome'].apply(lambda bps: pd.Series([lookup[bp] if bp in lookup else 0.0 for bp in bps.lower()])).values
但我有太多的数据无法放入内存,所以我试图使用块进行处理,但我在定义再处理函数时遇到了困难

以下是我目前的代码:

lookup = {
  '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=10)

chunk_list = []
def preprocess(chunk):
  chunk['Genome'].apply(lambda bps: pd.Series([lookup[bp] if bp in lookup else 0.0 for bp in bps.lower()])).values
  return;


for chunk in dataframe:
  chunk_filter = preprocess(chunk)
  chunk_list.append(chunk_filter)
  dataframe1 = pd.concat(chunk_list)

print(dataframe1)
提前谢谢

您有chunk\u filter=preprocesschunk,但您的预处理函数不返回任何内容,因此chunk\u filter总是毫无意义的。修改预处理函数以存储apply调用的结果,然后返回该值。例如:

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;
通过这样做,实际上可以从预处理函数返回数据,以便将其附加到块列表中。正如您目前所看到的,预处理函数工作正常,但实际上会丢弃结果