Pandas之容易讓人混淆的行選擇和列選擇


在剛學Pandas時,行選擇和列選擇非常容易混淆,在這里進行一下討論和歸納

本文的數據來源:https://github.com/fivethirtyeight/data/tree/master/fandango

import pandas as pd

fandango = pd.read_csv('fandango_score_comparison.csv')

原始的數據如下(截取了一部分)

Image 011

 

行選擇

Pandas進行行選擇一般有三種方法:

  • 連續多行的選擇用類似於python的列表切片
  • 按照指定的索引選擇一行或多行,使用loc[]方法
  • 按照指定的位置選擇一行多多行,使用iloc[]方法

 

第一種,使用類似於python的列表切片

n = fandango[1:3]

Image 012

從結果可以看到,和python的列表切片一樣,索引號從0開始,選擇了索引號1和2的數據(不包括3)

 

第二種,按照指定的索引選擇一行或多行,使用loc[]方法

o = fandango.loc[1]

p = fandango.loc[1:3]

Image 013

可以看到,o是一個Series,選擇了索引號為1的那一行數據,注意p,它與第一種的列表索引最大的不同是包含了索引號為3的那一行數據

 

u = fandango.loc[[1,3]]

圖片1

這里按照索引號選擇不連續的行

 

第三種,按照指定的位置選擇一行多多行,使用iloc[]方法

在上面的數據中,使用iloc[]和loc[]的效果是一樣的,因為索引號都是從0開始並且連續不斷,現在我要刪除索引號為1和2的這兩行

fandango_drop = fandango.drop([1,2], axis=0)

Image 014

可以看到的確刪除了兩行數據

此時我仍然用loc[]來索引行號為2的那一行,就會出錯

s = fandango_drop.loc[2]

Image 015

但是,我使用iloc[]來進行一次

t = fandango_drop.iloc[2]

Image 016

看到了吧,iloc[2]的意思是選擇第三行的數據,也就是索引號為4的那一行數據,因為iloc[]的計算也是從0開始的,所以iloc[]適用於數據進行了篩選后造成索引號與原來不一致的情況

loc[]與iloc[]方法之間還有一個巨大的差別,那就是loc[]里的參數是對應的索引值即可,所以參數可以是整數,也可以是字符串。而iloc[]里的參數表示的是第幾行的數據,所以只能是整數

 

列選擇

列選擇比較簡單,只要直接把列名傳遞過去即可,如果有多列的數據,要單獨指出列名或列的索引號

第一種,選擇單列,選擇了電影名稱那一列

q = fandango['FILM']

Image 019

 

第二種,通過指定列名選擇多列

r = fandango[['FILM','Metacritic']]

Image 020

 

第三種,非常容易讓人混淆的,通過列的索引號選擇多列

v = fandango[[0,1,2]]

Image 021

其實,列也是有一個索引號的,看到這里不禁想問,那我要選擇前5列呢?我不想寫一個長列表,又不想逐個寫出這5列的名稱,能否用切片呢?

x = fandango[[0:5]]

Image 022

事實證明,這是不行的,更好的方法是在參數中構建一個列表

w = fandango[list(range(5))]

Image 023

更多的參考資料:http://pandas.pydata.org/pandas-docs/version/0.17.0/api.html#id3

Image 024


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM