Python機器學習入門之Pandas

Panads簡介

Panads存在兩種結構:
1、Series:
類似於一維數組的對象,由一組數據以及一組數據與之對應的索引組成
索引(Index)在左,值(Values)在右
索引是自動創建,也可以自己指定
2、DataFrame:
是一個表格類型的數據,含有一組有序的列,每列可以是不同的類型。
DataFrame既有行索引也有列索引,可以看做是 Series 組成的字典
數據以二維的形式存放
索引對象不允許修改,但可以對索引進行全部替換

Panads簡單讀取

'''
import pandas as pd

'''
    Series
'''
ser = pd.Series([3, 4, 5, 6, 7, 8, 9])
print("左邊是索引,右邊是值:\n", ser)

# 獲取索引 和 值
print("獲取到的索引:", ser.index)
print("獲取到的值:", ser.values)

# 通過 索引 獲取 值
print("通過索引獲取值:", ser[6])

# 通過 dict 構建 Series  head()返會全部
year = {2015: 15.6, 2017: 16.6, 2018: 19.9, 2019: 99.2, 2020: 99.2}
ser_year = pd.Series(year)
print("通過 dict 構建 Series:\n", ser_year)

# count 計算出現頻率
print("計算 value 值個數:", ser_year.count())

# unique 計算唯一值
print("計算 unique 唯一值:", ser_year.unique())

print("\n\n\n\n")
'''
    DataFrame:
        可以輸入給 DataFrame 構造器數據:
            1、二維 ndarray
            2、由數組、列表、元組組成的字典
            3、由 Series 組成的字典
            4、由字典組成的字典
            5、另外一個 DataFrame
'''
frame = pd.DataFrame([7, 2, 3, 4, 5, 6])
print("創建 DataFrame:", frame.head())

# 通過 dict 構建 DataFrame
dict_data = {
    "A": 1,
    "B": "2019-04-06",
    "C": pd.Series([1, 2, 3, 4]),
    "D": ["Py", "Java", "C", "D"],
    "E": "IT"
}
dict_frame = pd.DataFrame(dict_data)
print("通過 dict 字典形式 創建 DataFrame:", dict_frame)

# 通過索引獲取數據   dict_frame['D'] 獲取 dict_frame.D
print("通過索引,獲取數據(Series類型):", dict_frame['D'])

# 增加列數據
dict_frame['new'] = "我是新來的"
dict_frame['old'] = "我要被刪除"
print("新增列:\n", dict_frame)

# 刪除列
del dict_frame['old']
print("刪除列:\n", dict_frame.head())

'''
    ix:
        dict_frame.ix[:,val]:選擇單個列
        dict_frame.ix[val1,val2]:同時選取行和列
        dict_frame.ix['A']:獲取指定索引對應的行信息,ix表示索引字段
        dict_frame.ix[:,'A']:獲取所有行的指定A列的數據
'''
print("獲取指定列的信息:", dict_frame.ix[:, 'A'])
print("獲取指定行的信息:", dict_frame.ix[2])
print("同時獲取行列信息", dict_frame.ix[2, 'A'])
print("獲取所有行的某列信息", dict_frame.ix[:, "D"])

'''
    iloc:
        根據下標索引進行訪問,可以訪問對應的行和列元素
    loc:
        根據下標索引進行訪問,可以訪問對應的行和列信息
    
    基本類似於 ix[]
'''
print("iloc 訪問對應行和列信息:", dict_frame.iloc[:, 3])
print(dict_frame.loc[:, :])

Panads簡單計算

import numpy as np
import pandas as pd

frame = pd.DataFrame(np.random.randint(10, size=(5, 4)), columns=['a', 'b', 'c', 'd'])
print("初始化數據:\n", frame)

'''
    常用操作:
        sum():求和
        mean():平均
        max():最大值
        min():最小值
        describe():產生多個統計數據(count,mean,std,min)
        query():類似 filter 過濾
        count 非Nan數量
        argmin、argmax 計算最大值或最小值對應的索引位置
        quantile 計算樣本的分位數(0-1)
        median 中位數
        mad 平均絕對離差
        var 樣本方差
        std 樣本的標準差
        skew 樣本值的偏度----正態分佈的偏度爲0
        kurt 樣本值的峯度------正態分佈的峯度爲3
        cumsum樣本值的累計和

    axis :
        默認爲 0
        0 :列
        1 :行
    skipna:
        True:計算
        False:如果有 NaN 則值爲 NaN
'''

# 修改部分值爲 nan
frame.ix[0, 'a'] = np.nan
frame.ix[0, 'd'] = np.nan
frame.ix[2, 'c'] = np.nan
print("修改部分值爲NaN:\n", frame)

# 求和
print("求和:\n", frame.sum(skipna=True))

# 求平均
print("求平均:\n", frame.mean(skipna=False))

# 求最值
print("最大值爲:", frame.max(), "最小值爲:", frame.min())
print("========================= \n")

# 生成多個統計數據
print("describe 產生多個統計數據:\n", frame.describe())

# query
df = pd.DataFrame(np.random.rand(10, 2), columns=list("ab"))

print("query : \n", df.query('a>b'))

Panads 函數運用(處理缺失值)

import pandas as pd
import numpy as np
'''
    處理缺失值:
        1、生成原始數據
        2、判斷數據是否缺失
        3、丟棄缺失數據
        4、填充缺失數據
    補充:
        applymap() :將函數應用到每個數據上
        apply() :將函數應用到行或列數據
        index() : 
            索引排序,默認升序排序 , ascending = False 爲降序排序
            按 Index 排序  sort_index
            按 Values 排序 sort_values(by='colonum')
        
'''
'''
    1.生成原始數據:
        DataFrame可接受的數據:
            1、ndarray 二維數組
            2、由數組、列表、元組組成的字典
            3、由 Series 組成的字典
            4、由 字典 組成的字典
            5、另外一個 DataFrame
'''
df_data = pd.DataFrame([[1, 2, 3], [4., 5., np.nan], [np.nan, 6., np.nan], [6., 7., 8.]])
print("1、生成原數據:\n", df_data)

# 2、判斷數據是否確實
print("2、判斷數據是否爲空:\n", df_data.isnull())

# 3、丟棄 缺失 數據   axis(0 -- 列,1 -- 行) :根據維度丟棄
print("3、丟棄缺失數據:\n", df_data.dropna())

# 4、填充缺失數據
print("4、填充缺失數據爲 100.:\n", df_data.fillna(100.))

# applymap 將函數運用到所有的數據上
f2 = lambda x: x * x
print("applymap 將函數運用到所有的數據上:\n", df_data.applymap(f2))

# 使用apply應用行或列數據
f1 = lambda x: x.max()
print("apply應用行或列數據:\n", df_data.apply(f1))

# 排序
print("根據 Index 排序後的數據:\n", df_data.sort_index)
print("根據 Values 排序後的數據:\n", df_data.sort_values(by=2))

Panads 層級索引

'''
    層級索引:
        在輸入索引Index時,輸入了由兩個子list組成的list,第一個子list是外層索引,第二個list是內層索引。
'''
import pandas as pd
import numpy as np

ser = pd.Series(np.arange(1, 11, 1),
                index=[
                    ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd'],
                    [0, 1, 2, 0, 1, 3, 0, 1, 2, 3]
                ])

print("層級索引原數據:\n", ser)
# 索引類型 MultiIndex
print("索引類別:", type(ser.index))

'''
    levels:
        表示兩個層級中分別有哪些標籤
    codes:
        每個位置分別是什麼標籤   
'''
print("打印索引:", ser.index)

'''
    選取子集:
        根據索引獲取數據:
            現在有兩層數據,當通過外層索引獲取數據的時候,可以直接利用外層索引標籤來獲取
            當要通過內層索引獲取數據的時候,在 list 中傳入兩個元素:
                前者表示要選取的外層索引
                後者表示要選取的內層索引
    常用於分組操作、透視表的生成等
'''
# 獲取外層數據
print("外層索引數據:\n", ser['b'])

# 獲取內層數據  前者表示外層索引,後者表示內層索引
print("內層索引數據:\n", ser[:, 1])

'''
    交換分層排序:
        swaplevel():交換內層與外層索引
'''
print("交換內層與外層索引:\n", ser.swaplevel())

'''
    交換並分層排序:
        sort_index():先對外層索引進行排序,再對內層索引進行排序,默認是升序
        sort_value():先對外層索引進行排序,再對內層索引進行排序,默認是升序
'''
print("交換並分層排序:\n",ser.swaplevel().sort_index())
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章