天天看點

Pandas基礎指令速查表

文章目錄

    • 1、縮寫解釋 & 庫的導入
    • 2、資料的導入
    • 3、資料的導出
    • 4、建立測試對象
    • 5、資料的檢視與檢查
    • 6、資料的選取
    • 7、資料的清洗
    • 8、資料的過濾(filter),排序(sort)和分組(groupby)
    • 9、資料的連接配接(join)與組合(combine)
    • 10、資料的統計

歡迎點選原文連結,Fork到自己的工作區進行實作和調試。

閱讀過本文的讀者可以點選這十套練習,教你如何使用Pandas做資料分析,進行線上實戰練習。

1、縮寫解釋 & 庫的導入

df — 任意的pandas DataFrame(資料框)對象

s — 任意的pandas Series(數組)對象

pandas和numpy是用Python做資料分析最基礎且最核心的庫

import pandas as pd # 導入pandas庫并簡寫為pd
import numpy as np # 導入numpy庫并簡寫為np
           

2、資料的導入

pd.read_csv(filename) # 導入csv格式檔案中的資料
pd.read_table(filename) # 導入有分隔符的文本 (如TSV) 中的資料
pd.read_excel(filename) # 導入Excel格式檔案中的資料
pd.read_sql(query, connection_object) # 導入SQL資料表/資料庫中的資料
pd.read_json(json_string) # 導入JSON格式的字元,URL位址或者檔案中的資料
pd.read_html(url) # 導入經過解析的URL位址中包含的資料框 (DataFrame) 資料
pd.read_clipboard() # 導入系統粘貼闆裡面的資料
pd.DataFrame(dict)  # 導入Python字典 (dict) 裡面的資料,其中key是資料框的表頭,value是資料框的内容。
           

3、資料的導出

df.to_csv(filename) # 将資料框 (DataFrame)中的資料導入csv格式的檔案中
df.to_excel(filename) # 将資料框 (DataFrame)中的資料導入Excel格式的檔案中
df.to_sql(table_name,connection_object) # 将資料框 (DataFrame)中的資料導入SQL資料表/資料庫中
df.to_json(filename) # 将資料框 (DataFrame)中的資料導入JSON格式的檔案中
           

4、建立測試對象

pd.DataFrame(np.random.rand(10,5)) # 建立一個5列10行的由随機浮點數組成的資料框 DataFrame
pd.DataFrame(np.random.rand(10,5))
>>>
           
Pandas基礎指令速查表
pd.Series(my_list) # 從一個可疊代的對象 my_list 中建立一個資料組
my_list = ['Kesci',100,'歡迎來到科賽網']
pd.Series(my_list)
>>>
           
Pandas基礎指令速查表
df.index = pd.date_range('2017/1/1', periods=df.shape[0]) # 添加一個日期索引 index
df = pd.DataFrame(np.random.rand(10,5))
df.index = pd.date_range('2017/1/1', periods=df.shape[0])
df
>>>
           
Pandas基礎指令速查表

5、資料的檢視與檢查

df.head(n)  # 檢視資料框的前n行
df = pd.DataFrame(np.random.rand(10,5))
df.head(3)
>>>
           
Pandas基礎指令速查表
df.tail(n) # 檢視資料框的最後n行
df = pd.DataFrame(np.random.rand(10,5))
df.tail(3)
>>>
           
Pandas基礎指令速查表
df.tail(n) # 檢視資料框的最後n行
df = pd.DataFrame(np.random.rand(10,5))
df.tail(3)
>>>
       0	        1	        2	        3	       4
7	0.617289	0.009801	0.220155	0.992743	0.944472
8	0.261141	0.940925	0.063394	0.052104	0.517853
9	0.634541	0.897483	0.748453	0.805861	0.344938
           
df.shape # 檢視資料框的行數與列數
df = pd.DataFrame(np.random.rand(10,5))
df.shape
>>>
           
Pandas基礎指令速查表
df.info() # 檢視資料框 (DataFrame) 的索引、資料類型及記憶體資訊
df = pd.DataFrame(np.random.rand(10,5))
df.info()
>>>
           
Pandas基礎指令速查表
df.describe() # 對于資料類型為數值型的列,查詢其描述性統計的内容
df.describe()
>>>
           
Pandas基礎指令速查表
s.value_counts(dropna=False) # 查詢每個獨特資料值出現次數統計
s = pd.Series([1,2,3,3,4,np.nan,5,5,5,6,7])
s.value_counts(dropna=False)
>>>
           
Pandas基礎指令速查表
df.apply(pd.Series.value_counts) # 查詢資料框 (Data Frame) 中每個列的獨特資料值出現次數統計
           

6、資料的選取

df[col] # 以數組 Series 的形式傳回選取的列
df = pd.DataFrame(np.random.rand(5,5),columns=list('ABCDE'))
df['C']
>>>
           
Pandas基礎指令速查表
df[[col1, col2]] # 以新的資料框(DataFrame)的形式傳回選取的列
df = pd.DataFrame(np.random.rand(5,5),columns=list('ABCDE'))
df[['B','E']]
>>>
           
Pandas基礎指令速查表
s.iloc[0] # 按照位置選取
s = pd.Series(np.array(['I','Love','Data']))
s.iloc[0]
>>>
           

‘I’

s.loc['index_one'] # 按照索引選取
s = pd.Series(np.array(['I','Love','Data']))
s.loc[1]
>>>
           

‘Love’

df.iloc[0,:] # 選取第一行
df = pd.DataFrame(np.random.rand(5,5),columns=list('ABCDE'))
df.iloc[0,:]
>>>
           
Pandas基礎指令速查表
df.iloc[0,0] # 選取第一行的第一個元素
df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df.iloc[0,0]
>>>
           

0.91525996455410763

7、資料的清洗

df.columns = ['a','b'] # 重命名資料框的列名稱
df = pd.DataFrame({'A':np.array([1,np.nan,2,3,6,np.nan]),
                 'B':np.array([np.nan,4,np.nan,5,9,np.nan]),
                  'C':'foo'})
df.columns = ['a','b','c']
df

>>>
           
Pandas基礎指令速查表
pd.isnull() # 檢查資料中空值出現的情況,并傳回一個由布爾值(True,Fale)組成的列
df = pd.DataFrame({'A':np.array([1,np.nan,2,3,6,np.nan]),
                 'B':np.array([np.nan,4,np.nan,5,9,np.nan]),
                  'C':'foo'})
pd.isnull(df)
>>>
           
Pandas基礎指令速查表
pd.notnull() # 檢查資料中非空值出現的情況,并傳回一個由布爾值(True,False)組成的列
df = pd.DataFrame({'A':np.array([1,np.nan,2,3,6,np.nan]),
                 'B':np.array([np.nan,4,np.nan,5,9,np.nan]),
                  'C':'foo'})
pd.notnull(df)
>>>
           
Pandas基礎指令速查表
df.dropna() # 移除資料框 DataFrame 中包含空值的行
df = pd.DataFrame({'A':np.array([1,np.nan,2,3,6,np.nan]),
                 'B':np.array([np.nan,4,np.nan,5,9,np.nan]),
                  'C':'foo'})
df.dropna()
>>>
           
Pandas基礎指令速查表
df.dropna(axis=1) # 移除資料框 DataFrame 中包含空值的列
df = pd.DataFrame({'A':np.array([1,np.nan,2,3,6,np.nan]),
                 'B':np.array([np.nan,4,np.nan,5,9,np.nan]),
                  'C':'foo'})
df.dropna(axis=1)
>>>
           
Pandas基礎指令速查表
df.dropna(axis=0,thresh=n)
df = pd.DataFrame({'A':np.array([1,np.nan,2,3,6,np.nan]),
                 'B':np.array([np.nan,4,np.nan,5,9,np.nan]),
                  'C':'foo'})
test = df.dropna(axis=1,thresh=1)
test
>>>
           
Pandas基礎指令速查表
df.fillna(x) # 将資料框 DataFrame 中的所有空值替換為 x
df = pd.DataFrame({'A':np.array([1,np.nan,2,3,6,np.nan]),
                 'B':np.array([np.nan,4,np.nan,5,9,np.nan]),
                  'C':'foo'})
df.fillna('Test')
>>>
           
Pandas基礎指令速查表
s.fillna(s.mean())   # 将所有空值替換為平均值

s = pd.Series([1,3,5,np.nan,7,9,9])
s.fillna(s.mean())
>>>
           
Pandas基礎指令速查表
s.astype(float) # 将數組(Series)的格式轉化為浮點數
s = pd.Series([1,3,5,np.nan,7,9,9])
s.astype(float)
>>>
           
Pandas基礎指令速查表
s.replace(1,'one') # 将數組(Series)中的所有1替換為'one'
s = pd.Series([1,3,5,np.nan,7,9,9])
s.replace(1,'one')
>>>
           
Pandas基礎指令速查表
s.replace([1,3],['one','three']) # 将數組(Series)中所有的1替換為'one', 所有的3替換為'three'
s = pd.Series([1,3,5,np.nan,7,9,9])
s.replace([1,3],['one','three'])
>>>
           
Pandas基礎指令速查表
df.rename(columns=lambda x: x + 2) # 将全體列重命名
df = pd.DataFrame(np.random.rand(4,4))
df.rename(columns=lambda x: x+ 2)
>>>
           
Pandas基礎指令速查表
df.rename(columns={'old_name': 'new_ name'}) # 将選擇的列重命名
df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df.rename(columns={'A':'newA','C':'newC'})
>>>
           
Pandas基礎指令速查表
df.set_index('column_one') # 改變索引
df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df.set_index('B')
>>>
           
Pandas基礎指令速查表
df.rename(index = lambda x: x+ 1) # 改變全體索引
df = pd.DataFrame(np.random.rand(10,5))
df.rename(index = lambda x: x+ 1)
>>>
           
Pandas基礎指令速查表

8、資料的過濾(filter),排序(sort)和分組(groupby)

df[df[col] > 0.5] # 選取資料框df中對應行的數值大于0.5的全部列
df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df[df['A'] > 0.5]
>>>
           
Pandas基礎指令速查表
df[(df[col] > 0.5) & (df[col] < 0.7)] # 選取資料框df中對應行的數值大于0.5,并且小于0.7的全部列
df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df[(df['C'] > 0.5) & (df['D'] < 0.7)]
>>>
           
Pandas基礎指令速查表
df.sort_values(col1) # 按照資料框的列col1升序(ascending)的方式對資料框df做排序
df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df.sort_values('E')
>>>
           
Pandas基礎指令速查表
df.sort_values(col2,ascending=False) # 按照資料框的列col2降序(descending)的方式對資料框df做排序
df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df.sort_values('A',ascending=False)
>>>
           
Pandas基礎指令速查表
df.sort_values([col1,col2],ascending=[True,False]) # 按照資料框的列col1升序,col2降序的方式對資料框df做排序
df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df.sort_values(['A','E'],ascending=[True,False])
>>>
           
Pandas基礎指令速查表
df.groupby(col) # 按照某列對資料框df做分組
df = pd.DataFrame({'A':np.array(['foo','foo','foo','foo','bar','bar']),
      'B':np.array(['one','one','two','two','three','three']),
     'C':np.array(['small','medium','large','large','small','small']),
     'D':np.array([1,2,2,3,3,5])})

df.groupby('A').count()
>>>
           
Pandas基礎指令速查表
df.groupby([col1,col2]) # 按照列col1和col2對資料框df做分組
df = pd.DataFrame({'A':np.array(['foo','foo','foo','foo','bar','bar']),
      'B':np.array(['one','one','two','two','three','three']),
     'C':np.array(['small','medium','large','large','small','small']),
     'D':np.array([1,2,2,3,3,5])})

df.groupby(['B','C']).sum()
>>>
           
Pandas基礎指令速查表
df.groupby(col1)[col2].mean() # 按照列col1對資料框df做分組處理後,傳回對應的col2的平均值
df = pd.DataFrame({'A':np.array(['foo','foo','foo','foo','bar','bar']),
      'B':np.array(['one','one','two','two','three','three']),
     'C':np.array(['small','medium','large','large','small','small']),
     'D':np.array([1,2,2,3,3,5])})
df.groupby('B')['D'].mean()
>>>
           
Pandas基礎指令速查表
df.pivot_table(index=col1,values=[col2,col3],aggfunc=mean) # 做透視表,索引為col1,針對的數值列為col2和col3,分組函數為平均值
df = pd.DataFrame({'A':np.array(['foo','foo','foo','foo','bar','bar']),
      'B':np.array(['one','one','two','two','three','three']),
     'C':np.array(['small','medium','large','large','small','small']),
     'D':np.array([1,2,2,3,3,5])})

df.pivot_table(df,index=['A','B'],
               columns=['C'],aggfunc=np.sum)
>>>
           
Pandas基礎指令速查表
df.groupby(col1).agg(np.mean)
df = pd.DataFrame({'A':np.array(['foo','foo','foo','foo','bar','bar']),
      'B':np.array(['one','one','two','two','three','three']),
     'C':np.array(['small','medium','large','large','small','small']),
     'D':np.array([1,2,2,3,3,5])})
df.groupby('A').agg(np.mean)
>>>
           
Pandas基礎指令速查表
df.apply(np.mean) # 對資料框df的每一列求平均值
 df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
 df.apply(np.mean)
 >>>
           
Pandas基礎指令速查表
df.apply(np.max,axis=1) # 對資料框df的每一行求最大值
df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df.apply(np.max,axis=1)
>>>
           
Pandas基礎指令速查表

9、資料的連接配接(join)與組合(combine)

df1.append(df2) # 在資料框df2的末尾添加資料框df1,其中df1和df2的列數應該相等
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']},
                   index=[0, 1, 2, 3])
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
                    'B': ['B4', 'B5', 'B6', 'B7'],
                    'C': ['C4', 'C5', 'C6', 'C7'],
                    'D': ['D4', 'D5', 'D6', 'D7']},
                   index=[4, 5, 6, 7])

df1.append(df2)
>>>
           
Pandas基礎指令速查表
pd.concat([df1, df2],axis=1) # 在資料框df1的列最後添加資料框df2,其中df1和df2的行數應該相等
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']},
                   index=[0, 1, 2, 3])
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
                    'B': ['B4', 'B5', 'B6', 'B7'],
                    'C': ['C4', 'C5', 'C6', 'C7'],
                    'D': ['D4', 'D5', 'D6', 'D7']},
                   index=[4, 5, 6, 7])
pd.concat([df1,df2],axis=1)
>>>
           
Pandas基礎指令速查表
df1.join(df2,on=col1,how='inner') # 對資料框df1和df2做内連接配接,其中連接配接的列為col1
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],           
                     'B': ['B0', 'B1', 'B2', 'B3'],
                     'key': ['K0', 'K1', 'K0', 'K1']})
   

df2 = pd.DataFrame({'C': ['C0', 'C1'],
                      'D': ['D0', 'D1']},
                     index=['K0', 'K1'])
   

df1.join(df2, on='key')
>>>
           
Pandas基礎指令速查表

10、資料的統計

df.describe() # 得到資料框df每一列的描述性統計
df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df.describe()
>>>
           
Pandas基礎指令速查表
df.mean() # 得到資料框df中每一列的平均值
df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df.mean()
>>>
           
Pandas基礎指令速查表
df.corr() # 得到資料框df中每一列與其他列的相關系數
df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df.corr()
>>>
           
Pandas基礎指令速查表
df.count() # 得到資料框df中每一列的非空值個數
df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df.count()
>>>
           
Pandas基礎指令速查表
df.max() # 得到資料框df中每一列的最大值
df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df.max()
>>>
dtype: float64
           
Pandas基礎指令速查表
df.min() # 得到資料框df中每一列的最小值
df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df.min()
>>>
           
Pandas基礎指令速查表
df.median() # 得到資料框df中每一列的中位數
df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df.median()
>>>
           
Pandas基礎指令速查表
df.std() # 得到資料框df中每一列的标準差
df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df.std()
>>>
           
Pandas基礎指令速查表

上述文中所有代碼部分都可以使用線上資料分析協作工具K-Lab複現,點選連結一鍵直達~

K-Lab提供基于Jupyter Notebook的線上資料分析服務,涵蓋Python&R等主流程式設計語言,可滿足資料科學家、人工智能工程師、商業分析師等資料工作者線上完成資料處理、模型搭建、代碼調試、撰寫分析報告等資料分析全過程。