1 回答

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊
為什么第二個(gè)標(biāo)準(zhǔn)中不使用 .loc?
df = pd.DataFrame({
? ? ? ? ?'col_1':[0,3,0,7,1,0],
? ? ? ? ?'col_2':[0,3,6,9,2,4],
? ? ? ? ?'col3':list('aaabbb')
})
不,你錯(cuò)了,兩者都有效。
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 列或更多列,請(qǐng)使用列表,例如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']
類型錯(cuò)誤
另外,為什么我們不能在第二個(gè)代碼中使用and ,即
df[(df['col_1']==0) and (df['col_2']>0)]
因?yàn)?code>and是通過標(biāo)量進(jìn)行處理,在 pandas 中用于&
按位AND
-?&
。
添加回答
舉報(bào)