我有一個包含508383行的數據幀。我只顯示前10行。通過CSV閱讀器迭代切片數據幀
0 1 2
0 chr3R 4174822 4174922
1 chr3R 4175400 4175500
2 chr3R 4175466 4175566
3 chr3R 4175521 4175621
4 chr3R 4175603 4175703
5 chr3R 4175619 4175719
6 chr3R 4175692 4175792
7 chr3R 4175889 4175989
8 chr3R 4175966 4176066
9 chr3R 4176044 417614 4
我想遍歷每一行,並檢查第一行的列#2的值到下一行的值。我想檢查這些值之間的差異是否小於5000.如果差異大於5000,那麼我想要將數據幀從第一行切片到前一行,並將其作爲子集數據幀。
然後我想重複這個過程並創建第二個子集數據框。我只能通過將CSV閱讀器與熊貓結合使用來完成此項任務。
這裏是我的代碼:
#!/usr/bin/env python
import pandas as pd
data = pd.read_csv('sort_cov_emb_sg.bed', sep='\t', header=None, index_col=None)
import csv
file = open('sort_cov_emb_sg.bed')
readCSV = csv.reader(file, delimiter="\t")
first_row = readCSV.next()
print first_row
count_1 = 0
while count_1 < 100000:
next_row = readCSV.next()
value_1 = int(next_row[1]) - int(first_row[1])
count_1 = count_1 + 1
if value_1 < 5000:
continue
else:
break
print next_row
print count_1
print value_1
window_1 = data[0:63]
print window_1
first_row = readCSV.next()
print first_row
count_2 = 0
while count_2 < 100000:
next_row = readCSV.next()
value_2 = int(next_row[1]) - int(first_row[1])
count_2 = count_2 + 1
if value_2 < 5000:
continue
else:
break
print next_row
print count_2
print value_2
window_2 = data[0:74]
print window_2
我想知道是否有更好的方法來做到這一點的過程),而每一次重複的代碼),並得到我需要的所有子集的數據幀。
謝謝。
羅德里戈
我記得看到類似的問題,有人想出了一個很好的答案,但我找不到它。作爲開始,這將爲您提供差異大於5000的每一行。data [abs(data [「2」] - data [「2」]。shift())> 5000]。我想你可以迭代並相應切片 –