2
注:我使用Python初學者,只是用熊貓幾天前開始。我在R.Python的 - 分割多列分隔符由
我試圖拆分大熊貓數據框的背景下,卻只能通過似乎一個分隔符在同一時間在同一時間分割一列。
我的數據是這樣的:
0 1 2 3 \
0 chr4:43571332-43571643 numsnp=3 length=312 state1,cn=0
1 chr5:179618873-179628421 numsnp=8 length=9,549 state1,cn=0
4 5 6
0 CCCC.A_1_TR27GD1 startsnp=S-3TZTE endsnp=S-4NDOX
1 CCCC.A_1_TR27GD1 startsnp=S-3IDBJ endsnp=S-4AKVJ
我想我的輸出看起來像這樣:
Chromosome Start End NumSNP Length StartSNP EndSNP
0 4 43571332 43571643 3 312 S-3TZTE S-4NDOX
1 5 179618873 179628421 8 9,549 S-3IDBJ S-4AKVJ
我知道這是很多,但是這涉及以下內容:
-
和-....也除去 「CHR」
- S:
- 通過拆分柱0 PLIT列1,2,5,6
- 重命名&重新排序列
- 等
問題: 我已經能夠使用下面的代碼來做到這一點,但想一些指導進一個更高效的代碼。
import pandas as pd
CNV = pd.read_csv('CCCC_cnv_practice.rawcnv', delimiter="\s+", engine='python', header=None)
#Get Chromosomes
ChrPos = pd.DataFrame(CNV[0].str.split(':',1).tolist(), columns = ['Chromosome','Position'])
Chromosome = ChrPos['Chromosome'].str.lstrip('chr')
#Get Start and End Positions
Positions = pd.DataFrame(ChrPos.Position.str.split('-',1).tolist(), columns = ['Start','End'])
#Get the Numsnp, Length, StartSNP, and EndSNP columns
Equals1 = CNV.iloc[:,1:3]
Equals2 = CNV.iloc[:,5:]
Equals = Equals1.join(Equals2)
TEST1 = pd.DataFrame(Equals[1].str.split('=',1).tolist())
TEST2 = pd.DataFrame(Equals[2].str.split('=',1).tolist())
TEST3 = pd.DataFrame(Equals[5].str.split('=',1).tolist())
TEST4 = pd.DataFrame(Equals[6].str.split('=',1).tolist())
#Put it all together
frames = [Chromosome, Positions, TEST1[1], TEST2[1], TEST3[1], TEST4[1]]
Data = pd.concat(frames, axis=1)
Data.columns = ['Chromosome', 'Start', 'End', 'NumSNP', 'Length', 'StartSNP', 'EndSNP']
這從14行至10滴我的代碼謝謝。沒有辦法做4行'#tmp是臨時列'1個步驟(即,通過'「=」'分割所有列)後? –
我認爲這是不可能的,因爲你'Series.string'工作。數據幀的長度如何 - 「print len(df)'?很大? – jezrael
最大的數據幀有180,000行。 –