Python 筛选 替换 排序 提取(单个染色体SNP从全基因组提取)

# -*- 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
发布了38 篇原创文章 · 获赞 13 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览