Python Pandas常用函數方法總結

初衷

NumPy、Pandas、Matplotlib、SciPy 等可以說是最最最常用的 Python 庫瞭。我們在使用 Python 庫的時候,通常會遇到兩種情況。以 Pandas 舉例。

  • 我想對 Pandas 數據結構的數據實現某種操作,但是我不知道或者說在我的印象裡似乎已經不記得是否有這樣的函數方法,如果有,又該用哪個方法呢?
  • 我想實現某種數據操作,我記得我用過或者見過某個函數可以實現這個功能,但是我死活想不起來那個函數叫啥瞭。或者,我想起來瞭哪個函數可以實現這個功能,但是我想知道是否有更好的選擇。

這個時候大傢就會開始借助百度、知乎、谷歌、CSDN 開始進行關鍵搜索瞭。這樣做當然可以,最終也能得到你想要的結果,但是就會面臨兩個小問題。

  • 有時候我想對數據做這樣的操作,我心裡知道是這個意思,但是我不知道如何去描述這個事情,關鍵詞不精確,導致搜索的結果有偏差,搜索技術不行,走瞭不少彎路。
  • 搜索到別人提供的結果,但是呢,要麼排版很亂,要麼長篇大論,從函數接口開始一點一點說,一堆你不想要的信息,讓你 get 不到重點,明明一秒鐘可以解決的問題,卻花瞭你一分鐘去看別人的解釋,獲取重點,浪費瞭不少時間。

基於以上,我就在想如何解決這樣一個問題。解決方案如下:假如你知道但隻是忘記瞭某個函數可以實現這個功能,那麼當你看到函數名稱的時候,就會想起來。所以,我想把最最常用的一些方法和函數名稱直接羅列出來,然後你一眼掃過去或者直接 ctrl+f 搜索中文,就能輕易喚起你曾經的記憶。假如你不知道是否存在一個函數,有你想要的功能,我依然還是把函數名稱羅列出來,然後在其後進行一個中文的補充說明。你一眼掃過這些函數及其補充說明,相信很快就能判斷是否有滿足你需求的函數。

下面的內容這樣組織,第二部分我羅列出常用的 Pandas 函數方法,及其補充說明,第三部分我對這些函數的用法進行舉例子,你拷貝到代碼中進行修改就可以直接使用,這比從接口模板開始一點一點看省事多瞭。我相信這也是大部分優秀的程序員想要的東西,用最短的時間,完成想做的事情。當然,當下面的內容不滿足你的需求,你可以進一步地去搜索即可。

以下函數方法,涵蓋瞭 90% 以上的使用情況,值得收藏,作為小字典查詢。

除非你經常用某種語言,函數方法爛熟於心而根本不需要查詢,否則的話,大部分人也記不住這些東西。可能隻記得有這麼一個東西,都是現查別人的代碼,要麼拷貝過來改改,要麼手抄過來。特別是我這種,接觸的語言比較多,就經常搞串用法,大部分時候 ,都是現查現賣。

Pandas 最最常用函數羅列

## 讀寫
pd.Series #定義一維標記數組
pd.DataFrame #定義數據框
pd.read_csv #讀取逗號分隔符文件
pd.read_excel #讀取 excel 表格
pd.to_excel #寫入 excel 表格
pd.read_sql #讀取 SQL 數據
pd.read_table #讀取 table
pd.read_json #讀取 json 文件
pd.read_html #讀取 html
pd.read_clipboard() #從剪切板讀入數據
df.to_csv #寫入 csv 文件
df.to_excel #寫入 excel 文件
df.to_sql #寫入 SQL 表
df.to_json #寫入 JSON 文件
df.to_html #寫入 HTML 表格
df.to_clipboard() #寫入剪切板

## 數據展示和統計
df.info() #統計數據信息
df.shape() #統計行數和列數
df.index() #顯示索引總數
df.columns() #顯示數據框有哪些列
df.count() #顯示有多少個記錄
df.head(n) #返回前 n 個,默認 5
df.tail(n) #返回後 n 個
df.sample(n) #隨機選取 n 行
df.sample(frac = 0.8) #百分比為 0.8 的選取
df.dtypes #查看每一列的數據類型
df.sum() #數據框按列求和
df.cumsum() #數據框累計求和
df.min() #給出每列的最小值
df.max() #給出每列的最大值
df['列名'].idxmin() #獲取數據框某一列的最小值
mySeries.idxmin() #獲取 Series 的最小值
df['列名'].idxmax() #獲取數據框某一列的最大值
mySeries.idxmax() #獲取 Series 的最大值
df.describe() #關數據的基本統計信息描述
df.mean() #給出數據框每一列的均值
df.median() #給出數據框每一列的中位數
df.quantile #給出分位數
df.var() #統計每一列的方差
df.std() #統計每一列的標準差
df.cummax() #尋找累計最大值,即已出現中最大的一個
df.cummin() #累計最小值
df['列名'].cumproad() #計算累積連乘
len(df) #統計數據框長度
df.isnull #返回數據框是否包含 null 值
df.corr() #返回列之間的相關系數,以矩陣形式展示
df['列名'].value_counts() #列去重後給每個值計數

## 數據選擇
mySeries['列名'] #用中括號獲取列
df['列名'] #選取指定列
df.列名 #同上
df[n0:n1] #返回 n0 到 n1 行之間的數據框
df.iloc[[m],[n]] #iloc按行號來索引,兩層中括號,取第 m 行第 n 列
df.loc[m:n] #loc 按標簽來索引,返回索引 m 到 n 的數據框,loc、iloc 主要針對行來說的
df.loc[:,"列1":"列2"] #返回連續列的所有行
df.loc[m:n,"列1":"列2"] #返回連續列的固定行
df['列名'][n] #選取指定列的第 n 行
df[['列1','列2']] #返回多個指定的列

## 數據篩選和排序
df[df.列名 < n] #篩選,單中括號用於 bool 值篩選
df.filter(regex = 'code') #過濾器,按正則表達式篩選
df.sort_values #按某一列進行排序
df.sort_index() #按照索引升序排列
df['列名'].unique() #列去重
df['列名'].nunique() #列去重後的計數
df.nlargest(n,'列名') #返回 n 個最大值構成的數據框
df.nsmallest(n,'列名') #返回 n 個最小的數據框
df.rank #給出排名,即為第幾名

## 數據增加刪除修改
df["新列"] = xxx #定義新列
df.rename #給列重命名
df.index.name = "index_name" #設定或者修改索引名稱
df.drop #刪除行或者列
df.列名 = df.列名.astype('category') #列類型強制轉化
df.append #在末尾追加一行
del df['刪除的列'] #直接刪除一列

## 特別的
df.列名.apply #按列的函數操作
pd.melt #將寬數據轉化為長數據(拆分拉長),run 一下下面例子就知道什麼意思瞭
pd.merge #兩個數據表間的橫向連接(內連接,外連接等)
pd.concat #橫向或者縱向拼接

Pandas 函數用法示例

mySeries = pd.Series([1,2,3,4], index=['a','b','c','d'])

data = {'Country' : ['Belgium', 'India', 'Brazil' ],
        'Capital': ['Brussels', 'New Delhi', 'Brassilia'],
        'Population': [1234,1234,1234]}
df = pd.DataFrame(data, columns=['Country','Capital','Population'])

pd.DataFrame(np.random.rand(20,5))

df = pd.read_csv('data.csv')

pd.read_excel('filename')
pd.to_excel('filename.xlsx', sheet_name='Sheet1')

df.quantile([0.25, 0.75]) # 給出每一列中的25%和75%的分位數

filters = df.Date > '2021-06-1'
df[filters] #選出日期在某個日期之後的所有行

df.filter(regex='^L') #選出 L 開頭的列

df.sort_values('列名', ascending= False) #按指定列的值大小升序排列

df.rename(columns= {'老列名' : '新列名'}) #修改某個列名

df["新列"] = df.a- df.b #定義一個新的列表示為兩個的差

df.columns = map(str.lower(), df.columns) #所有列名變為小寫字母

df.columns = map(str.upper(), df.columns) #所有列名變為大寫字母

df.drop(columns=['列名']) #刪除某一列
df.drop(['列1', '列2'], axis=1) #含義同上,刪除兩列
mySeries.drop(['a']) #刪除 Series 指定值
df.drop([0, 1]) #根據索引刪除,雙閉區間

def fun(x):
    return x*3
df.列名.apply(fun)  #把某一列乘 3 倍

df.列名.apply(lambda x: x*3) #匿名表達式的寫法

df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},'B': {0: 1, 1: 3, 2: 5}, 'C': {0: 2, 1: 4, 2: 6}})
pd.melt(df, id_vars=['A'], value_vars=['B','C']) #melt的使用

new=pd.DataFrame({'name':'lisa', 'gender':'F', 'city':'北京'},index=[1])
df = new
df=df.append(new) #增加一行數據

frame = pd.DataFrame({'a':[2.3,-1.7,5,3],'b':[6,2.9,-3.1,8]},index=['one','two','three','four'])
frame.rank(method="min",ascending=False)#對每一列的數據,根據大小給個排名


#merge 表示橫向連接
df3 = pd.merge(df1,df2,how='inner',on='股票簡稱') #on表示連接列,how選擇連接方式
pd.merge(df1,df2,left_on='lkey',right_on='rkey',how='left') #當連接列名不同分別指定
#concat 拼接
pd.concat([df1,df1])  #縱向連接,當s1和s2索引不重疊時,可以直接拼接
pd.concat([df1,df1],axis = 1)  #橫向連接,默認外連接,以行索引為連接字段

到此這篇關於Python Pandas常用函數方法總結的文章就介紹到這瞭,更多相關Pandas常用函數方法內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: