1. 程式人生 > >pandas的基本功能(一)

pandas的基本功能(一)

第16天pandas的基本功能(一)

靈活的二進位制操作

  • 體現在2個方面

    • 支援一維和二維之間的廣播

    • 支援缺失值資料處理

  • 四則運算支援廣播

    • +add - sub *mul /div

    • divmod()分割槽和模運算(返回商和餘數2個結果)

      • 案例:a,b=divmod(一維矩陣)

    • 空值處理

      • 矩陣中空值用NaN代替

      • NaN+值=NaN

      • np(numpy).nan表示空值

      • 填充空值: fillna(value=值)

      • np.nan == np.nan 結果為False

        • 如果a矩陣和b矩陣中有空值 那麼 a == b 結果:False

        • 相同:a.equal(b )結果為:True.帶空的矩陣比較推薦使用equal

    • 組合

      • 從df2中把df1的資料不全

        • df1.combine_first(df2)

      • 連線

        • 連線二維矩陣

          • df1.concat(df2,axis=0/1)

        • 連線一維矩陣

          • pd.concat([df1,df2])

        • 一維二維通用

          • df1.append(df2)

    • 統計

      • 所有統計函式都支援行或列~~~

        • sum(0/1) mean(0/1)

      • 統計函式

        功能 描述
        count 非NA觀測數量
        sum 價值總和
        mean 價值的平均值
        mad 平均絕對偏差
        median 算術值的中值
        min 最低限度
        max 最大值
        mode 模式
        abs 絕對值
        prod 價值的產物
        std 貝塞爾校正的樣本標準偏差
        var 無偏差
        sem 平均值的標準誤差
        skew 樣本偏斜(第3時刻)
        kurt 樣本峰度(第4個時刻)
        quantile 樣本分位數(值為%)
        cumsum 累計金額
        cumprod 累積產品
        cummax 累積最大值
        cummin 累積最小值
    • 統計函式,統計的時候自動跳過空值

    • len(陣列)獲取行數,包括Nan所在的行~~~count(不包括)

    • include

      • #可以指定摘要統計的東西
        矩陣.describe(include=['object'])
        矩陣.describe(include=['number'])
    • 最大最小索引

      • 最大數和最小數對應的索引位置

        • 最大 矩陣.idxmax(axis=0/1)

        • 最小 矩陣 .idxmin(axis=0/1)

    • 最常出現值模式

      • a.value_counts() 統計一維陣列中每個元素出現的次數

      • a.mode()統計陣列中出現次數最多的值

    • 分段/面元

      • cut和qcut

        • 共同點

          • 都可以分為好多份 pd.cut/qcut(df,4) qcut 是對等的 cut 是隨機的

        • 不同點

          • pd.cut(df,[陣列]) qcut不支援

        • 語法 pd.cut(df,[切點列表],right=True/False)

          • 示列

          #分2組  大於18的為成年,小於18的為未成年,統計個數 
          a = pd.Series([4,5,5,2,3,1,8,9,3,15,6,45,56,1,56,2,20,4,5,2,1,8,18,1,82,20,25,20,20,12,13,14])
          b = pd.cut(a,[0,18,100],labels=['未成年','成年'],right=False)
          b.value_counts()
    • 為矩陣新增處理函式/支援多個函式

      • 鏈式寫法

        • (df.pipe(函式名,引數).pipe(函式名,引數).......)

      • apply

        • df.apply(函式名,axis=0/1) 為當前行或列新增處理函式

          • 示列

          #12.判斷年齡是否成年: 18歲以上成年   #成年和未成年獲救比例
          """
          1.判斷是否成年
          2.
          """
          def age_old(b):
             
             c = b['Age']
             if c > 18:
                 return '成年'
             elif c < 18:
                 return '未成年'
             else:
                 return '空值'
          #建立新列
          df['chegnnian'] = df.apply(age_old,axis=1)
          #設定全家的漢子顯示
          plt.rcParams['font.size'] = 15

          h_j = df.groupby(by=['Survived','chegnnian']).size()
          plt.pie(h_j,labels=['成年未獲救','未成年未獲救','空值未獲救','成年獲救','未成年獲救','空值獲救'],shadow=True,autopct='%1.1f%%')
          plt.axis('equal') #設定圓的形狀 正圓
          plt.show()

           

      • map

        • df.applymap == df.map()

          • 示列

            #10.    以下肉類資料來源,food都轉換為小寫,新增一個動物列,而且字串都是小寫
            data = pd.DataFrame({'food': ['bacon', 'pulled pork', 'bacon','Pastrami', 'corned beef', 'Bacon','pastrami', 'honey ham', 'nova lox'],
            'price': [4, 3, 12, 6, 7.5, 8, 3, 5, 6]})
            data['food'].str.lower()

            #新列: 動物列
            animal = { 'bacon': 'Pig', 'pulled pork': 'pIg', 'pastrami': 'cOw', 'corned beef': 'Co', 'honey Ham': 'pig', 'nova lox': 'Salmon' }
            x = data['food'].map(animal)
            data['animal'] = x
            data
          •