# -*- 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
Python 筛选 替换 排序 提取(单个染色体SNP从全基因组提取)
最新推荐文章于 2024-05-09 21:20:00 发布