牛魔王的故事
为什么第二个标准中不使用 .loc?df = pd.DataFrame({ 'col_1':[0,3,0,7,1,0], 'col_2':[0,3,6,9,2,4], 'col3':list('aaabbb')})不,你错了,两者都有效。print (df.loc[df['col_1']==0]) col_1 col_2 col30 0 0 a2 0 6 a5 0 4 bprint (df.loc[(df['col_1']==0) & (df['col_2']>0)]) col_1 col_2 col32 0 6 a5 0 4 bprint (df[df['col_1']==0]) col_1 col_2 col30 0 0 a2 0 6 a5 0 4 bprint (df[(df['col_1']==0) & (df['col_2']>0)]) col_1 col_2 col32 0 6 a5 0 4 b使用的原因是如果还需要过滤列名称,例如col_1:print (df.loc[df['col_1']==0, 'col_2'])0 02 65 4Name: col_2, dtype: int64print (df.loc[(df['col_1']==0) & (df['col_2']>0), 'col_2'])2 65 4Name: col_2, dtype: int64如果需要过滤 2 列或更多列,请使用列表,例如col_1,col3使用:print (df.loc[df['col_1']==0, ['col_1','col3']]) col_1 col30 0 a2 0 a5 0 bprint (df.loc[(df['col_1']==0) & (df['col_2']>0), ['col_1','col3']]) col_1 col32 0 a5 0 b如果省略loc则失败:df[df['col_1']==0, 'col_1']df[(df['col_1']==0) & (df['col_2']>0), 'col_1']类型错误另外,为什么我们不能在第二个代码中使用and ,即df[(df['col_1']==0) and (df['col_2']>0)]因为and是通过标量进行处理,在 pandas 中用于&按位AND- &。