Python 篩選 替換 排序 提取(單個染色體SNP從全基因組提取)
阿新 • • 發佈:2019-01-13
# -*- coding: utf-8 -*- """ Created on Wed Nov 28 18:06:39 2018 @author: windows10 """ import pandas as pd #from pandas import DataFrame as df #對ped鹼基形式替換為數字形式 f = open('C:\\Users\\windows10\\Desktop\\Python練習\\文字流\\all.ped') data1 = pd.read_table(f,header = None) #header 預設為第一行 data1.shape #展示資料框的 行數和列數,如果資料為1,則對sep重新設定進行調節 data1.head() data11 = data1.iloc[:, 6:] data11[data11.isnull().values == True] data11 = data11.replace('A', 1) data11 = data11.replace('T', 2) data11 = data11.replace('C', 3) data11 = data11.replace('G', 4) print(data11) data12 = pd.concat([data1.iloc[:, :6],data11],axis = 1) print(data12) data12.shape data12.head(20) #抽取map第一條染色體多行的SNP位點,並按照位置順序進行排列 f = open('C:\\Users\\windows10\\Desktop\\Python練習\\文字流\\all.map') data2 = pd.read_table(f,names=['1', '2', '3', '4']) #header 預設為第一行 data2.shape #展示資料框的 行數和列數,如果資料為1,則對sep重新設定進行調節 data2.head() data2.iloc[:,1] #map檔案的首列 data2.iloc[:,1].shape print(type(data2)) data2.iloc[5,1] type(data2.iloc[5,1]) #確定元素型別 data2 = data2.astype('object') #轉化元素型別為object類 print(data2['1']) data21 = data2[data2['1'] == '8'] #‘1’為字串,加‘’,選取map檔案裡的所有2號染色體上的位點 data21.head() data21.values data21['1'] data21.index #檢視行索引 data21.columns #檢視列索引 data21.values #檢視資料框的值 data21.dtypes #檢視每列的資料型別 data21['4'].astype('int64') #轉化第四列為數值型,才能排序 data22 = data21.sort_values(by = '4') #by 後直接跟index data22.shape data22.head(500) list = data22['2'] list = list.tolist() #將第二列資料(第N條染色體上的SNP name)傳遞到列表 list #為ped檔案建立col.name li = [] for j in range(0,68516): #把SNP位點列表轉化為ped的column名 li.append(data2.iloc[j,1]) li.append(data2.iloc[j,1]) print(li) st = ['FMID', 'INID', 'FAID', 'MOID', 'SEX', 'H'] #為ped檔案建立前6列 表頭 st lis = st + li #前6列表頭和ped7::個表頭合併,建立完整的ped表頭 lis[:10] len(lis) #修改data12的列名 data12.columns = lis #為ped檔案建立表頭 data12.head(20) data12.shape #對1號染色體多行的位點從ped 檔案中提取 #按照map檔案中1號染色體,排好序的SNP,逐個對list中SNP進行提取 data12['WUR10000127'] type(data12['WUR10000127']) newdf = data12.iloc[:, :6] #提取ped檔案表頭 newdf for k in list: #從ped檔案裡提取第N條染色體上的SNP位點,並組成新的資料框 newdf = pd.concat([newdf,data12[k]],axis = 1) #Axis = 1代表逐列合併(按列合併) newdf.columns newdf.to_excel("C:\\Users\\windows10\\Desktop\\Python練習\\文字流\\chrom8_ped.xlsx", index = False, header = True) data22.to_excel("C:\\Users\\windows10\\Desktop\\Python練習\\文字流\\chrom8_map.xlsx", index = False, header = True) # 流程化操作需要修改的地方,如下: ### 42: data2['1'] == ### 87: newdf.to_exce ### 88: data22.to_excel