Python之DataFrame常用方法小結

2021-08-20 05:11:57 字數 4782 閱讀 4613

【series】

性質:一維陣列物件,類似numpy 的一維array。

除了包含一組資料還包含一組索引,所以可以把它理解為一組帶索引的陣列。

obj = series([1,2,3,4],index = [『a』,』b』,』c』,』d』]) #通過 index 引數顯示指定索引

obj.indexobj.values        #單獨獲取 series 物件的索引或者陣列內容

obj*2 obj+1 obj[obj>10]#對series物件的運算(索引不變)

【dataframe】

性質:乙個**型的資料結構。它提供有序的列和不同型別的列值。

建立:可以將乙個轉換成dataframe,key為columns

dataframe(data,columns = [『col0』,』col1』,』col2』])#傳入columns引數指定列的順序

如果傳入的列名找不到,它不會報錯,而是產生一列 na 值

獲取資料:frame[『col1』]frame.col1

刪除資料:del frame[『col1』]

【產生日期】

date_index = pd.date_range('11/19/2017', periods=10, freq='d')

——————————————————————常用方法———————————————————————

(1)reindex( )方法:重新索引

根據index引數重新進行排序。如果傳入的索引值在資料裡不存在,則不會報錯,而是新增缺失值的新行。不想用缺失值,可以用 fill_value 引數指定填充值。

e.gobj1 = obj.reindex([『a』,』b』,』c』],fill_value = 0)

#fill_value 會讓所有的缺失值都填充為同乙個值,如果不想這樣而是用相鄰的元素(左或者右)的值填充,則可以用 method 引數,可選的引數值為 ffill 和 bfill,分別為用前值填充和用後值填充。

e.gobj2 = obj.reindex(range(6),method = 『ffill』)

(2)drop() 方法:丟棄資料

data.drop([『idx1』,』idx2』])#刪除行

data.drop([『col1』,』col2』],axis = 1) #新增axis引數刪除列

(3)索引、選取和過濾

[注意]

利用索引的切片運算與普通的 python 切片運算不同,其末端是包含的,既包含最後乙個的項。

e.gobj[『b』:』d』]包含』d』,但是obj[1:3]不包含3

loc和iloc

df.loc[index,column_names]#知道column names 和index,且兩者都很好輸入

df.iloc[index,col_index]#column_name太長;index是時間序列不好輸入 i_index

ix操作:混合使用下標和名稱進行選取

data.ix[『idx』,[『col1』,』col2』]]

data.ix[2] #第2行

data.ix[data.col1<5,:3] # data.col1<5的前2列

(4)算術運算和資料對齊

1)series:將2個物件相加時,具有重疊索引的索引值會相加處理;不重疊的索引則取並集,值為 na;

2)對齊操作會同時發生在行和列上,把2個物件相加會得到乙個新的物件,其索引為原來2個物件的索引的並集;和series 物件一樣,不重疊的索引會取並集,值為 na;如果不想這樣,試試使用 add() 方法進行資料填充:

df1+df2   #會出現nan

df1.add(df2,fill_value = 0)#無nan

(5)函式應用和對映

df.sort_index(ascending = false)frame.sort_index(axis = 1)

series: obj.sort_values()obj.sort_index()

排名obj.rank(ascending = false) #索引位上的數的排名

帶有重複值的軸索引

obj.index.is_unique#false

索引時,同時輸出多個值

(7)匯**計和計算

df.sum() #縱向彙總(行求和) aixs=1為橫向彙總

df.cumsum() #縱向彙總_累計彙總

df.idxmax() #獲取最大值對應的索引

obj.unique() #返回資料裡的唯一值array

obj. value_counts()#統計各值出現的頻率,返回series索引為值

obj. isin([『c』])#判斷成員資格,在原表基礎上修正為bool

(8)處理缺失資料

使用isnull()和notnull()函式來判斷缺失情況。

對於缺失資料一般處理方法為濾掉或者填充。

濾除缺失資料

data.dropna() #返回乙個包含非空資料和索引值的表,等價於data[data.notnull()]

data.dropna(how = 『all』)  #只有行裡的資料全部為空時才丟棄,axis=1按列丟棄

填充缺失資料

df.fillna(0) #用預設值填充缺失資料

df.fillna()#可以傳入字典對不同的列填充不同的值(鍵表示列)

(9)層次化索引:能在乙個陣列上擁有多個索引,有點像excel裡的合併單元格

根據索引選擇資料子集

data[『a』] #以外層索引的方式選擇資料子集

data[:,2] #以內層索引的方式選擇資料

data.unstack() #多重索引series轉換為dataframe,第二層索引為列

重排分級順序

df. swaplevel(『idx1_name』, 『idx2_name』)#將兩個級別的資料進行交換

df. sortlevel(0,ascending = false)#以行按第一層(0)進行排序

df. sortlevel(1,ascending = false,axis=1)#列按第二層(1)進行排序

根據級別匯**計

多層次索引的資料,彙總的時候可以單獨按照級別進行

df.sum(level=』idx1_name』)

(10)資料合併

a)pandas.merge():資料庫風格的合併

pd.merge(df1,df2,on=』col_coname』) 

#以col_coname列當作鍵,缺省內連線(inner),即鍵的交集

pd.merge(df1,df2,on=』col_coname』,how=『left』)#左連線(left),右連線(right)和外連線[並集](outer)

left.join(right) 

#以索引作為連線鍵

b)pandas.concat()方法:軸向連線,即沿著一條軸將多個物件堆疊到一起

pd.concat([s1,s2,s3]) #預設concat在豎軸(axis=0)上連線,即產生新的series。

c)例項方法combine_first()方法:合併重疊資料

s1.combine_first(s2) 

#等價於np.where(pd.isnull(s1),s2,s1)

這是乙個向量化的if-else操作,如果s1裡某個位置上的資料為空,則用s2同位置上的元素來補,你可以理解為「打補丁」操作。

(11)資料重塑/軸向旋轉

重塑指的是將資料重新排列,也叫軸向旋轉。

stack: 將資料的列「旋轉」為行。unstack:將資料的行「旋轉」為列。

處理堆疊格式

堆疊格式也叫長格式,一般關係型資料庫儲存時間序列的資料會採用此種格式

df.pivot(『col1』,』col2』,』col3』) 

(12)資料轉換:對資料的過濾、清理以及其他的轉換操作。

移除重複資料

df.duplicated() 

#檢測各行是否重複,預設判斷全部列,預設保留第乙個出現的值

df.duplicated([『col1』]) 

#判斷指定列

df.drop_duplicates() 

#丟棄重複行

df.drop_duplicates(keep=『lost』) #或傳入take_last=true保留最後乙個值

利用對映進行資料轉換

data[『new_col』] = data[『col1』].map(col1_to_new_col)#map到乙個dict

data[『col1』].map(lambda x: col1_to_new_col[x]) #等價於使用函式

替換值data.replace(value,np.nan)

data.replace([value1, value2],[ np.nan,0])

重新命名軸索引

data.rename(index=str.title,columns=str.upper)

將資料劃分成不同的組

scores=[40,54,60,85,87,81]

score_levels=[0,60,80,95]

cats = pd.cut(scores,score_levels)#輸出內容為區間的列表

pd.value_counts(cats)#統計區間個數

檢測和過濾異常值

data.decsribe()#產生資料的count,mean,std,min…

data[np.abs(data)>2]#找出絕對值大於2的值,不滿足的為nan

data[np.abs(data)>2.any(1)]#找出絕對值大於2的行

data[np.abs(data)>2]=0#將異常值設定為0

pandas的資料結構之DataFrame

dataframe是乙個 型的資料結構,它含有一組有序的列,每列可以是不同資料型別的資料。dataframe既有行索引也有列索引,可以將它看作為乙個由series組成的字典 共用同乙個索引 dataframe中的資料是以乙個或多個二維塊儲存的,而不是列表 字典或別的一維資料結構。a 通過字典建立,字...

DataFrame學習二 DataFrame的性質

2.1 索引 切片 資料集 data frame2 pd.dataframe data,index one two three four five columns year state pop debt 返回一列資料 frame2 year 返回多列多行 返回兩行 frame2 two three ...

DataFrame學習一 DataFrame的建立

1.1 概要 dataframe是一種 型資料結構,它含有一組有序的列,每列可以是不同的值。dataframe的行索引是index,列索引是columns 建立方式 根據dict進行建立,以及讀取csv或者txt檔案來建立 1.2 字典建立 資料集 data frame pd.dataframe d...