我使用函数:
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)删除熊猫行。这在较小的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个,所以没有加起来。
答案 0 :(得分:0)
如果仅是过滤,为什么不使用:
dft = dft[dft['lab'] != 0]
这将用lab=0
过滤掉所有行。
答案 1 :(得分:0)
错误是,使用drop
时它会基于index
而消除,但是我的df是服务器数据帧的串联,因此我不得不使用reset_index
来解决问题。