何时使用 .loc 何时不使用(Pandas Dataframe)?

有人可以帮助我理解,在对数据框进行子集化时,我们通常会这样做

df.loc[df['col_1']==0]

但是,当我必须根据两个列值或多个条件进行子集化时,我们会这样做

df[(df['col_1']==0) & (df['col_2']>0)]

为什么第二个标准中不使用.loc

另外,为什么我们不能在第二个代码中使用and ,即

df[(df['col_1']==0) and (df['col_2']>0)] ?


青春有我
浏览 80回答 1
1回答

牛魔王的故事

为什么第二个标准中不使用 .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- &。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python