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
- &
。
添加回答
举报