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
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bio Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值