Python 基于列中的值筛选dataframe中的行
我有以下数据帧:Python 基于列中的值筛选dataframe中的行,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我有以下数据帧: In [48]: df.head(10) Out[48]: beat1 beat2 beat3 beat4 beat5 beat6 beat7 filename M46_MI_RhHy61d.dat 0.7951 0.8554 0.9161 1.0789
In [48]: df.head(10)
Out[48]:
beat1 beat2 beat3 beat4 beat5 beat6 beat7
filename
M46_MI_RhHy61d.dat 0.7951 0.8554 0.9161 1.0789 0.6664 0.7839 0.6076
M60_MI_AH53d.dat 0.7818 0.7380 0.8657 0.9980 0.7491 0.9272 0.8781
M57_Car_AF0489d.dat 1.1040 1.1670 1.7740 1.3080 1.2190 1.0800 1.2390
F62_MI_AH39d.dat 1.2150 0.9360 0.9890 1.1960 0.8420 1.1530 1.1360
F81_MI_DM10d.dat 1.0650 1.1190 1.1330 1.2040 1.1220 1.1640 1.0600
M61_My_508d.dat 0.6963 0.7910 0.6362 0.6938 0.7410 0.7198 0.7060
M69_MI_554d.dat 1.0400 1.0890 1.0190 0.9600 1.0720 1.0870 1.0100
F78_MI_548d.dat 1.1410 1.3290 0.8620 0.0000 1.3160 1.2180 1.2870
F68_MI_AH152d.dat 1.1910 1.1170 1.1030 1.2430 1.0100 0.0000 0.0000
M46_Myo_484d.dat 0.6799 0.7278 0.6808 0.7059 0.7973 0.6956 0.6685
在某些情况下,列中的某些(但不一定全部)值等于0
,我不知道它们会出现在给定行的哪些列中。例如,在上面给出的数据帧中,最后第二行中的最后两个值为零。我想从数据帧中删除这样的行。如果我知道这些值将出现在哪些列中,我就可以这样做,然而,这正是我所不知道的。有什么想法吗?IIUC:
要删除任何一行中的零吗
选项1pd.DataFrame.mask
返回带有np.nan
的数据帧,其中布尔数组参数为True
。然后我可以dropna
,它默认为在存在任何空值的地方删除行
df.mask(df == 0).dropna()
beat1 beat2 beat3 beat4 beat5 beat6 beat7
filename
M46_MI_RhHy61d.dat 0.7951 0.8554 0.9161 1.0789 0.6664 0.7839 0.6076
M60_MI_AH53d.dat 0.7818 0.7380 0.8657 0.9980 0.7491 0.9272 0.8781
M57_Car_AF0489d.dat 1.1040 1.1670 1.7740 1.3080 1.2190 1.0800 1.2390
F62_MI_AH39d.dat 1.2150 0.9360 0.9890 1.1960 0.8420 1.1530 1.1360
F81_MI_DM10d.dat 1.0650 1.1190 1.1330 1.2040 1.1220 1.1640 1.0600
M61_My_508d.dat 0.6963 0.7910 0.6362 0.6938 0.7410 0.7198 0.7060
M69_MI_554d.dat 1.0400 1.0890 1.0190 0.9600 1.0720 1.0870 1.0100
M46_Myo_484d.dat 0.6799 0.7278 0.6808 0.7059 0.7973 0.6956 0.6685
选项2使用
loc
,其中行中的所有值均非零
df.loc[(df != 0).all(1)]
选项3numpy
提供了很多效率。与备选方案2类似的概念。然而,我们从头开始重建
v = df.values
mask = (v != 0).all(1)
pd.DataFrame(v[mask], df.index[mask], df.columns)
原始时间测试
成功了!请你也解释一下好吗?特别是,我想知道为什么
df=df[df>0]
不起作用。@泰和井df[df>0]
有点起作用。它返回df
的部分,其中df>0
为True
。对于df>0
为False
的位置,它没有答案,因此得到的是空值df[df>0].dropna()
也可以。