![](/img/trans.png)
[英]How to read data from csv file if all the values are in the same column?
[英]How to read two lines in a data from same column to create combination of values from that column?
在以下數據中:
M1 M2 M3 M4 M5 M6 M7 M8 Hx Hy S1 S2 S3 S4
A T T A A G A C A C C G C T
A T T A A G A C A C C G C T
T G C T G T T G T A A T A T
C A A C A G T C C G G A C G
G T G T A T C T G T C T T T
使用了以下代碼:
d1 = d1.add('g').add(d1.shift()).dropna()
要得到:
M1 M2 M3 M4 M5 M6 M7 M8 H0 H1 S1 S2 S3 S4
AgA TgT TgT AgA AgA GgG AgA CgC AgA CgC CgC GgG CgC TgT
TgA GgT CgT TgA GgA TgG TgA GgC TgA AgC AgC TgG AgC TgT
CgT AgG AgC CgT AgG GgT TgT CgG CgT GgA GgA AgT CgA GgT
GgC TgA GgA TgC AgA TgG CgT TgC GgC TgG CgG TgA TgC TgG
但是,如果數據具有以下結構:
M1 M2 M3 M4 Hx Hy S1 S2 pos
A/T T/A A/G G/G A C C/G C/T 2
A/T T/A A/G G/G G T C/G C/T 12
T/G C/T G/T T/G C G T/T T/T 16
T/T T/T T/T T|T G T T/T T/T 17
相反,我想要除pos
之外的每一列的所有可能字母(前一行和當前行之間)的組合。
所以,它會是這樣的:
M1 M2 Hx Hy S1 S2
AgA,AgT,TgA,TgT TgT,TgA,AgT,AgA AgA TgC CgC,CgG,GgC,GgG CgC,CgT,TgC,TgT
TgA,TgT,GgA,GgT ....
so on for all other line
我正在添加一個矩陣來理解這個過程:
values from previous line in m1 (at pos 12)
A T
value from next T TgA TgT
next line pos 16 -> G GgA GgT
我嘗試使用 itertools 將每一行中的值保留為字典列表:
for row in d1_group.iterrows():
index, data = row
temp.append(data.tolist())
print(temp)
接下來,想法是使用索引(或 pos)作為鍵,然后在相鄰的索引(或 pos)值之間創建組合。
使用熊貓或字典來做這件事的任何可能性。
謝謝,
前言:
import itertools as it
list(it.product(['A'], ['T']))
Out[229]: [('A', 'T')]
list(it.product(['A', 'T'], ['T', 'G']))
Out[230]: [('A', 'T'), ('A', 'G'), ('T', 'T'), ('T', 'G')]
','.join('g'.join(t) for t in it.product(['A'], ['T']))
Out[231]: 'AgT'
','.join('g'.join(t) for t in it.product(['T', 'G'],['A', 'T']))
Out[233]: 'TgA,TgT,GgA,GgT'
因此,讓我們構建一個包含以下內容的數據框:
df=df.applymap(lambda c: [[c]])
df
Out[258]:
M1 M2 M3 M4 M5 M6 M7 M8 Hx Hy \
0 [[A]] [[T]] [[T]] [[A]] [[A]] [[G]] [[A]] [[C]] [[A]] [[C]]
1 [[A]] [[T]] [[T]] [[A]] [[A]] [[G]] [[A]] [[C]] [[A]] [[C]]
2 [[T]] [[G]] [[C]] [[T]] [[G]] [[T]] [[T]] [[G]] [[T]] [[A]]
3 [[C]] [[A]] [[A]] [[C]] [[A]] [[G]] [[T]] [[C]] [[C]] [[G]]
4 [[G]] [[T]] [[G]] [[T]] [[A]] [[T]] [[C]] [[T]] [[G]] [[T]]
(df+df.shift(1)).dropna(how='all').applymap(lambda c: ','.join('g'.join(t)
for t in it.product(*c)))
Out[266]:
M1 M2 M3 M4 M5 M6 M7 M8 Hx Hy S1 S2 S3 S4
1 AgA TgT TgT AgA AgA GgG AgA CgC AgA CgC CgC GgG CgC TgT
2 TgA GgT CgT TgA GgA TgG TgA GgC TgA AgC AgC TgG AgC TgT
3 CgT AgG AgC CgT AgG GgT TgT CgG CgT GgA GgA AgT CgA GgT
4 GgC TgA GgA TgC AgA TgG CgT TgC GgC TgG CgG TgA TgC TgG
現在對夫婦來說也一樣,只是做了更多的清理/准備工作:
df.set_index('pos', inplace=True)
df
Out[273]:
M1 M2 M3 M4 Hx Hy S1 S2
pos
2 A/T T/A A/G G/G A C C/G C/T
12 A/T T/A A/G G/G G T C/G C/T
16 T/G C/T G/T T/G C G T/T T/T
17 T/T T/T T/T T|T G T T/T T/T
df = df.applymap(lambda c: [c.split('/')])
df
Out[274]:
M1 M2 M3 M4 Hx Hy S1 S2
pos
2 [[A, T]] [[T, A]] [[A, G]] [[G, G]] [[A]] [[C]] [[C, G]] [[C, T]]
12 [[A, T]] [[T, A]] [[A, G]] [[G, G]] [[G]] [[T]] [[C, G]] [[C, T]]
16 [[T, G]] [[C, T]] [[G, T]] [[T, G]] [[C]] [[G]] [[T, T]] [[T, T]]
17 [[T, T]] [[T, T]] [[T, T]] [[T|T]] [[G]] [[T]] [[T, T]] [[T, T]]
(df+df.shift(1)).dropna(how='all').applymap(lambda c: ','.join('g'.join(t) for t in it.product(*c)))
Out[276]:
M1 M2 M3 M4 Hx \
pos
12 AgA,AgT,TgA,TgT TgT,TgA,AgT,AgA AgA,AgG,GgA,GgG GgG,GgG,GgG,GgG GgA
16 TgA,TgT,GgA,GgT CgT,CgA,TgT,TgA GgA,GgG,TgA,TgG TgG,TgG,GgG,GgG CgG
17 TgT,TgG,TgT,TgG TgC,TgT,TgC,TgT TgG,TgT,TgG,TgT T|TgT,T|TgG GgC
Hy S1 S2
pos
12 TgC CgC,CgG,GgC,GgG CgC,CgT,TgC,TgT
16 GgT TgC,TgG,TgC,TgG TgC,TgT,TgC,TgT
17 TgG TgT,TgT,TgT,TgT TgT,TgT,TgT,TgT
您現在可以重置索引並取回pos
。 您可能需要通過移動和適當對齊來進行調整。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.