[英]Odd dropping of pandas rows based on conditions
我使用 function:
def df_proc(df, n):
print (list(df.lab).count(0)) # control label to see if it changes after conditional dropping
print ('C:', list(df.lab).count(1))
df = df.drop(df[df.lab.eq(0)].sample(n).index)
print (list(df.lab).count(0))
print ('C:', list(df.lab).count(1))
return df
根據特定條件(其中 df.lab == 0)刪除 pandas 行。 這在一個小的df(例如n = 100)上工作正常但是當我增加df中的行數時會發生一些奇怪的事情......其他標簽的計數(.= 0)也開始減少並受到條件的影響..
例如:
# dummy example:
import random
list2 = [random.randrange(0, 6, 1) for i in range(1500000)]
list1 = [random.randrange(0, 100, 1) for i in range(1500000)]
dft = pd.DataFrame(list(zip(list1, list2)), columns = ['A', 'lab'])
dftest = df_proc(dft,100000)
給...
249797
C: 249585
149797
C: 249585
但是當我在我的實際 df 上運行它時:
dftest = df_proc(S1,100000)
我的控制標簽發生了變化,這很奇怪。
467110
C: 70434
260616
C: 49395
我不確定錯誤可能來自哪里。 我嘗試使用frac
和df.query('lab == 0')
但仍然遇到相同的錯誤。 我注意到的另一件事是,當我增加n
時,控制標簽不變,只有當我增加n
。
dftest = df_proc(S1,1)
給出:
467110
C: 70434
467107
C: 70434
哪個不加起來,因為 3 個樣本已被刪除,而不是 1 個。
如果只是關於過濾,為什么不使用:
dft = dft[dft['lab'] != 0]
這將過濾掉所有帶有lab=0
的行。
錯誤是,當使用drop
時,它會根據index
消除,但是我的 df 是多個數據幀的串聯,因此我不得不使用reset_index
來克服這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.