基於pandas索引的數據查找、排序和去重小結


由於Pandas的索引比較復雜,常常在使用過程中容易搞混,所以整理一份關於索引的查找、排序、去重的總結文檔。

import pandas as pd
import numpy as np
#定義DataFrame
dict={'a':[1,2,3],'b':[4,5,6],'c':[7,8,9]}
df=pd.DataFrame(dict,index=['one','two','three'])
df
a b c
one 1 4 7
two 2 5 8
three 3 6 9

1.Series通過索引查找

可用Index ,也可用數字下標

s1=df['b']
s1['two']
s1[['two','one']]  # 用數組列出離散的標簽,要用[ ]括起來
s1['two':'three']  # 標簽切片
s1[0:2]            # 標號切片的右區間是開的

2.DataFrame通過索引查找

(1) 直接通過列索引取列

df['b']
df[['b','c']]  # 用數組列出離散的標簽,要用[ ]括起來

(2) .loc 通過標簽索引數據

  • 先寫行標簽,后寫列標簽
  • 列舉多個列,要用數組,用[ ]括起來
  • 列舉切片,則無需用[ ]括起來。注意標簽切片的右括號是閉合的
df.loc[['two','one']]   #索引多行,行名用數組
df.loc['two':'three']   #索引多行,行名用切片
df.loc[:,['b','a']] #索引某行多列,列名用數組
df.loc[:,'b':'a']   #索引某行多列,列名用切片

(3) .iloc 通過通過標號獲取數據

  • 先寫行號,再寫列號
  • 可用單值,也可用切片,注意:標號切片的右括號是開區間的
df.iloc[1:3,1:3]

3.索引和列之間的轉換

(1) 列-->索引

  • inplace參數可以定義是否覆蓋原數據
df.set_index('a', inplace=True)  # inplace=True 會在原變量直接改,沒有返回值
df
df1=df.set_index('a', inplace=False)  # inplace=False則有返回值(默認),原變量不變
df1

(2) 索引-->列

  • 索引變成列會排在DataFrame的第一列
df.reset_index(inplace=True) 
df

4.利用索引進行排序

  • 通過索引排列,升序排列、不覆蓋原數據、如有缺失值則放在前面
df.sort_index(ascending=True, inplace=False, na_position='first')

5.根據索引進行數據去重

  • keep='first' or 'last',可以選擇保留第一條或最后一條
df=df[~df.index.duplicated(keep='first')]


免責聲明!

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



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