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

Python - Defining a chunk function to encode genomic data

我正在尝试将基因组从存储在数据框中的字符串编码为相应数值的数组。

这是我的一些数据框(出于某种原因,它没有给我全部 5 列,只有 2 列):

Antibiotic  ...                                             Genome
0       isoniazid  ...  ccctgacacatcacggcgcctgaccgacgagcagaagatccagctc...
1       isoniazid  ...  gggggtgctggcggggccggcgccgataaccccaccggcatcggcg...
2       isoniazid  ...  aatcacaccccgcgcgattgctagcatcctcggacacactgcacgc...
3       isoniazid  ...  gttgttgttgccgagattcgcaatgcccaggttgttgttgccgaga...
4       isoniazid  ...  ttgaccgatgaccccggttcaggcttcaccacagtgtggaacgcgg...

所以我需要将这些字符串一个字符一个字符地拆分并分配给浮点数。这是查找 table 我正在使用:

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_filter = preprocess(chunk),但是你的preprocess()函数return什么都没有,所以chunk_filter总是没有意义的。修改您的预处理函数以存储 apply() 调用的结果,然后 return 该值。例如:

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;

通过这样做,您实际上 return 来自预处理函数的数据,以便它可以附加到块列表中。正如您目前所拥有的那样,预处理功能可以正常工作,但实际上会丢弃结果。