天天看點

pandas 回顧總結!!!1. Python資料分析介紹及環境搭建

1. Python資料分析介紹及環境搭建

1.1python資料分析簡介【了解】

1.1.1 python做資料分析的優勢

  • 可以獨立完成資料分析的各種任務
  • 功能強大,有海量的開源包(pandas,numpy...)
  • 處理海量資料效率高
  • 開源免費

1.1.2 常用python資料分析開源庫

  • numpy:用于數組計算
  • pandas:分析結構化資料的工具集
    • series:類似一維數組的對象(一行資料或者一列資料)
    • dataframe:表格型資料結構(有行有列的資料)
  • matplotlib,seaborn:可視化開源庫
  • scikit-learn:基于python語言的機器學習開源庫
  • jupyter notebook:不是開源庫,是資料分析的首選開發環境,類似于pycharm

1.2 python資料分析環境搭建

1.2.1 anaconda簡介【了解】

  • 是資料分析平台
  • 可以管理安裝包和虛拟環境

1.2.2 anaconda的虛拟環境管理

  • 概念:是一個包含了特定 Python 解析器以及一些軟體包的自包含目錄【了解】
  • 作用【知道】
    • 隔離不同python版本或者相同開源庫的不同版本
    • 能夠讓不同版本的代碼在不同的虛拟環境中運作
  • 虛拟環境常用終端行指令【掌握】
    # 建立虛拟環境 python=3.8 指定python版
    conda create -n 虛拟環境名稱 python=3.8
    # 進入虛拟環境
    conda activate 虛拟環境名稱
    # 退出虛拟環境
    conda deactivate
    # 删除虛拟環境
    conda remove -n 虛拟環境名稱 --all
    # 檢視已建立的虛拟環境
    conda env list      

1.2.3 anaconda的包管理功能

# 安裝python的第三方包
pip install 包名
# 解除安裝python的第三方包
pip uninstall 包名
​
# 安裝其他包速度慢可以指定國内鏡像
# 阿裡雲:https://mirrors.aliyun.com/pypi/simple/
# 豆瓣:https://pypi.douban.com/simple/
# 清華大學:https://pypi.tuna.tsinghua.edu.cn/simple/
# 中國科學技術大學 http://pypi.mirrors.ustc.edu.cn/simple/
​
pip install 包名 -i https://mirrors.aliyun.com/pypi/simple/  #通過阿裡雲鏡像安裝      

1.2.4 jupyter notebook的使用

  • 終端啟動

    這種方式先啟動cmd,通過切換虛拟環境和磁盤位置,再啟動Jupyter notebook

# 可選操作,切換虛拟環境,使用不同的python解釋器和包,預設使用base環境
conda activate 虛拟環境名字
# 切換磁盤位置,到指定目錄下啟動
cd d:/test
# 啟動jupyter notebook
jupyter notebook
# 将終端網址複制到浏覽器 
# http://127.0.0.1:8888/?token=b37f5e4da9892205efd9d87db55260054232ddc0ebb25e78      
  • 常用快捷鍵【知道】
    • Jupyter Notebook中分為兩種模式:指令模式和編輯模式
    • 兩種模式通用快捷鍵
      • Shift+Enter

        ,執行本單元代碼,并跳轉到下一單元
      • Ctrl+Enter

        ,執行本單元代碼,留在本單元
    • 按ESC進入指令模式
      • Y

        ,cell切換到Code模式
      • M

        ,cell切換到Markdown模式
      • A

        ,在目前cell的上面添加cell
      • B

        ,在目前cell的下面添加cell
      • 輕按兩下D

        :删除目前cell
    • 編輯模式:按Enter進入,或滑鼠點選代碼編輯框體的輸入區域
      • 回退:

        Ctrl+Z

        (Mac:CMD+Z)
      • 補全代碼:變量、方法後跟

        Tab鍵

      • 為一行或多行代碼添加/取消注釋:

        Ctrl+/

        (Mac:CMD+/)
  • 使用markdown
    • 在指令模式(ESC)中,按M即可進入到Markdown編輯模式
    • markdown基本文法:标題和縮進
      # 一級标題
      ## 二級标題
      ### 三級标題
      - 一級縮進
          - 二級縮進
          - 三級縮進      

1.3 pandas dataframe入門

1.3.1導包并加載資料【知道】

import pandas as pd
df = pd.read_csv('.../xxx.csv')
df = pd.read_csv('.../xxx.tsv',sep='\t')
...      
  • csv和tsv檔案的差別
    • csv是以逗号作為行内資料的分隔符
    • tsv是以\t(table)作為行内資料的分隔符
    • 二者都是以換行符\n為行與行之間的分割
  • Pandas導出導入資料
    • pd.read_xxx()

      讀取(導入)資料注意是pandas.read_xxx
    • df.to_xxx('.../xxx.xxx')

      儲存(導出)資料注意是dataframe.to_xxx

1.3.2 檢視部分資料【重要】

  • 加載列資料
    # 加載一列資料
    df['列名']
    ​
    # 加載多列資料
    df[['列名1','列名2','列名3'...]]      
  • 加載行資料或者行列部分資料
    # 通過行索引序号加載前五條資料,head(n=),預設n=5,可以手動傳入想檢視的行數
    df.head()
    ​
    # # 通過行索引序号加載後五條資料,tail(n=),預設n=5,可以手動傳入想檢視的行數
    df.tail()      
    • loc:根據行索引标簽/值加載行資料,還可以通過切片方法擷取資料,左閉右閉
    # 加載一行資料
    df.loc['行索引值']
    ​
    # 加載多行資料
    df.loc[['行索引值1','行索引值2','行索引值3'...]]
    df.loc['行索引值1':'行索引值2']
    ​
    # 加載某行某列資料
    df.loc[['行索引值'],['列索引值']]
    ​
    # 加載多行多列
    df.loc[['行索引值1','行索引值2'...],['列索引值1','列索引值2'...]]
    df.loc['行索引值1':'行索引值2','列索引值1':'列索引值2']      
    • iloc:根據行索引序号加載行資料,還可以通過切片方法擷取資料,左閉右開
    # 加載一行資料
    df.iloc['行索引序号']
    
    # 加載多行資料
    df.iloc[['行索引序号1','行索引序号2','行索引序号3'...]]
    df.iloc['行索引序号1':'行索引序号2']
    
    # 加載某行某列資料
    df.iloc[['行索引序号'],['列索引序号']]
    
    # 加載多行多列
    df.iloc[['行索引序号1','行索引序号2'...],['列索引序号1','列索引序号2'...]]
    df.iloc['行索引序号1':'行索引序号2','列索引序号1':'列索引序号2']
          

1.3.3 分組聚合【重要】

  • 分組聚合表達式
# 對一列分組一列聚合
df.groupby('分組的列名')['聚合的列名'].聚合函數()

# 對多列分組多列聚合 注意多列分組聚合時,聚合部分為兩個清單,否則報錯
df.groupby(['分組的列名1','分組的列名2'...])[['聚合的列名1','聚合的列名2'...]].聚合函數()
      
  • 常用的聚合函數
sum() # 求和
mean() # 求平均
std() # 标準差
max() # 最大值
min() # 最小值
count() # 非空值個數
nunique() # 唯一值個數
      

1.4 pandas資料結構

1.4.1 Series常用操作【知道】

  • Series建立:傳入一個Python清單
    • 如果傳入的資料類型是統一的數字,那麼最終的dtype類型是int64
    • 如果傳入的資料類型是統一的字元串,那麼最終的dtype類型是object
    • 如果傳入的資料類型是多種類型,那麼最終的dtype類型也是object
# data=,傳入要python清單;index=指定行索引,不傳的話行索引預設為0,1,2...
pd.Series(data=,index=)

# 例子1
s = pd.Series(['banana', 42])
# 輸出結果如下
0    banana
1        42
dtype: object

#例子2
s = pd.Series(['Wes McKinney','Male'],index = ['Name','Gender'])
# 輸出結果如下
Name      Wes McKinney
Gender            Male
dtype: object
      
  • Series常用屬性
s.index # 擷取行索引,屬性
s.keys() # 擷取行索引,方法
# 屬性後面不加(),方法後面加()

s.values # 擷取值
      
  • Series常用方法
s.mean() # 平均值
s.max() # 最大值
s.min() # 最小值
s.std() # 标準差
s.value_counts() # 不同值(不同類别)的條目數量
s.count() # 非空值個數

s.describe() 
# 輸出數值列統計描述:①count非空值個數,②mean平均值,③std标準差,④max最小值,⑤25%四分之一分位值,⑥50%二分之一分位值,⑦75%四分之三分位值,⑧最大值
# 輸出非數值列統計描述:①count非空值個數,②unique唯一值個數,③top出現次數最多的值,④freq出現最多值的次數
      
  • 通過布爾值清單擷取Series部分資料
s[[True,False,True,False]]
# 傳回為True的值,最後傳回兩個值
      
  • Series運算
    • series和數值型變量計算
      • 變量和series中的每個元素逐一進行計算
    • 兩個Series之間計算
      • 根據索引比對規則進行計算,相同的索引進行計算,不同的索引無法計算,用NaN填充

1.4.2 DataFrame常用操作【重要】

  • 常用屬性和方法
df.shape # 檢視行數,列數
df.size # 檢視資料個數
len(df) # 檢視資料行數
df.count() # 檢視各列非空值個數
df.max() # 檢視各列最大值,數值列傳回最大值,非數值列傳回出現次數最多的值
df.min()
df.describe() # 傳回數值列統計描述
      
  • DataFrame的布爾索引
    • 同Series一樣,DataFrame也可以使用布爾索引擷取資料子集
# 擷取前5行資料中的第1、2、4個
movie.head()[[True,True,False,True,False]]
      
  • dataframe的運算
    • 當DataFrame和數值進行運算時,DataFrame中的每一個元素會分别和數值進行運算
    • 兩個DataFrame之間進行計算,和series一樣會根據索引的值進行對應計算
    • 當兩個DataFrame索引值不能對應時,不比對的會傳回NaN
    • DataFrame中如果有非數值列,隻能進行相加或者相乘的操作,對非數值列進行複制,其他計算會發生報錯
  • 指定某列為DataFrame索引
df.set_index('列名') # 括号裡列為指定索引列
pd.read_csv('path',index_col='列名') # 加載資料時通過index_col指定某列為df的索引

df.reset_index() # 重置索引,變為0,1,2,3...
      
  • 修改行名列名
# 方法一
df.rename(index={'原行名1':'新行名1','原行名2':'新行名2'...},columns={'原列名1':'新列名1','原列名2':'新列名2'...},inplace=True)
# index=,columns= 後跟要修改的行列名字典
# inplace=True 在源資料上修改,預設False,在記憶體或者副本上修改,源資料并沒有修改
# 涉及到df修改删除操作,不指定inplace=True,預設源資料不會進行修改,或者将修改的資料重新儲存為一個變量名

# 方法二
将df.index 和 df.columns屬性提取出來,修改之後,再指派回去
      
  • 添加删除插入
    • 通過

      dataframe['列名']

      添加新列,添加至最後
      df['新列名'] = 常數
      df['新列名'] = df['列名1'] + df['列名2'] # 數值列加減乘除都可以,一行一行計算
            
    • 删除列
      df.drop('列名',axis='columns',inplace=True) # inplace=True源資料上删除,axis='columns',預設按行删除,axis='index'
            
    • 插入列
      df.insert(loc=列下标數字, column='列名', value=該列所有的值)
      # loc= 插入列的位置,按列索引序号
      # column= 新插入列的名字
      # value= 新插入列的值,可以是常用,也可以是計算完的結果
            

1.4.3 導出導入資料【重要】

  • 導入加載資料
    pd.read_xxx('檔案路徑') 
    # 常用方法 read_csv(),read_excel()
    
    # 加載mysql資料庫資料
    # 方法一:用DBAPI建構資料庫連結engine
    import pandas as pd
    import pymysql
    conn = pymysql.connect(host='localhost',
                           user='root',
                           password='',
                           database='database_name')
    df = pd.read_sql("select * from table_name",con=conn)
    
    # 方法二:用sqlalchemy建構資料庫連結engine
    import sqlalchemy
    from sqlalchemy import create_engine
    #connect_info = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(DB_USER, DB_PASS, DB_HOST, DB_PORT, DATABASE)
    connect_info = 'mysql+pymysql://{}:{}@{}:{}/{}'.format('root',
    													   '', 
    													   'localhost', 
    													   3306, 
    													   'nowcoderdb')
    engine=create_engine(connect_info)
    df=pd.read_sql("select * from table_name",con=engine)
          
  • 導出資料
    pd.to_xxx('檔案路徑')
    # 常用方法 to_csv(),to_excel()
    
    # 導出資料到msyql資料庫
    import sqlalchemy
    from sqlalchemy import create_engine
    #connect_info = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(DB_USER, DB_PASS, DB_HOST, DB_PORT, DATABASE)
    connect_info = 'mysql+pymysql://{}:{}@{}:{}/{}'.format('root',
    													   '', 
    													   'localhost', 
    													   3306, 
    													   'nowcoderdb')
    engine=create_engine(connect_info)
    df.to_sql('表名',engine,if_exists='')
    # if_exists='',replace:删除表,重新建立儲存資料(覆寫資料),append:向表中追加資料
          

1.5 Pandas資料分析入門

  • describe() 【知道】
    • 預設列印資料值列統計描述
    • 列印非數值列統計描述
      import numpy as np
      df.describe(include=[np.object, pd.Categorical])
      # np.object 字元串類型
      # pd.Categorical dataframe特有的類别類型
            
  • info() 【知道】
    • 傳回所有字段的條目數量、資料類型、是否缺失,及目前資料集整體的記憶體占用情況
  • 常用排序方法
    • nlargest() 【知道】
      df.nlargest(n,columns)
      # 根據指定列的值由大到小排列,傳回n行資料
            
    • nsmallest() 【知道】
      df.nsmallest(n,columns)
      # 根據指定列的值由小到大排列,傳回n行資料
            
    • sort_values() 【重要】
      # 對一列進行排序 ascending預設升序True,False為降序
      df.sort_values(by='列名',ascending='')
      
      # 對多列進行排序
      # 多列排序時,ascending 參數傳入一個清單,排序參數也是一個清單,并且一一對應
      df.sort_values(by=['列名1','列名2'...],ascending='')
      df.sort_values(by=['列名1','列名2'...],ascending=[True,False...])
            
  • 去重 【重要】
    # 删除列名1,列名2...相同的資料,預設保留第一條資料
    df.drop_duplicates(subset=['列名1','列名2'...])