为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

青春有我 2023-07-27 09:38:03
有人可以帮助我理解,在对数据框进行子集化时,我们通常会这样做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)] ?
查看完整描述

1 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

为什么第二个标准中不使用 .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 col3

0      0      0    a

2      0      6    a

5      0      4    b


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

   col_1  col_2 col3

2      0      6    a

5      0      4    b

print (df[df['col_1']==0])

   col_1  col_2 col3

0      0      0    a

2      0      6    a

5      0      4    b


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

   col_1  col_2 col3

2      0      6    a

5      0      4    b

使用的原因是如果还需要过滤列名称,例如col_1:


print (df.loc[df['col_1']==0, 'col_2'])

0    0

2    6

5    4

Name: col_2, dtype: int64



print (df.loc[(df['col_1']==0) & (df['col_2']>0), 'col_2'])

2    6

5    4

Name: col_2, dtype: int64

如果需要过滤 2 列或更多列,请使用列表,例如col_1,col3使用:


print (df.loc[df['col_1']==0, ['col_1','col3']])

   col_1 col3

0      0    a

2      0    a

5      0    b


print (df.loc[(df['col_1']==0) & (df['col_2']>0), ['col_1','col3']])

   col_1 col3

2      0    a

5      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&



查看完整回答
反对 回复 2023-07-27
  • 1 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信