一,、Pandas認(rèn)識(shí)pandas主要是用來(lái)進(jìn)行數(shù)據(jù)處理/數(shù)據(jù)分析的第三方庫(kù),其中不僅包含了數(shù)據(jù)處理,、甚至還有統(tǒng)計(jì)分析等相關(guān)計(jì)算,,其內(nèi)部封裝了numpy的相關(guān)組件。 pandas的主要數(shù)據(jù)類型有:
二,、創(chuàng)建DataFrame和Series1,、加載數(shù)據(jù)import numpy as np# 加載數(shù)據(jù)res = np.load('某數(shù)據(jù).npz')columns = res['columns']values = res['values']print('columns:\n',columns)print('values:\n',values) 2、數(shù)組轉(zhuǎn)化為df結(jié)構(gòu)將數(shù)組轉(zhuǎn)化成 我們想要的 比較好看的行列結(jié)構(gòu)
3、將df轉(zhuǎn)化為Series結(jié)構(gòu)(取df某一列)如何將df轉(zhuǎn)化為Series,,由于Series只有行索引,,沒有列索引,所以Series只是DataFrame取一列的特殊情況 ser = df['序號(hào)']print(ser)print(type(ser)) 根據(jù)行索引或行索引名稱取出series中的行數(shù)據(jù)
4,、使用字典生成一個(gè)df數(shù)據(jù)d = {'col1':[0,1,2],'col2':[1,2,3],'col3':[3,4,5]}df = pd.DataFrame(data=d,index=['a','b','c'])print(df)print(type(df)) 拿取多列數(shù)據(jù),,可以發(fā)現(xiàn),數(shù)據(jù)類型還是df并不是series(series只能是拿取df的一列數(shù)據(jù))
5,、使用series方法自己生成一個(gè)series數(shù)據(jù)ser = pd.Series([1,2,3],index=['a','b','c'])print(ser)print(type(ser)) 三,、DataFrame的屬性1、手動(dòng)創(chuàng)建一個(gè)df數(shù)據(jù)(每一列數(shù)據(jù)類型一致)
2,、df的values屬性(可用于數(shù)組和dataframe數(shù)據(jù)轉(zhuǎn)化)# df的值,,獲取df數(shù)組print('df 的values:\n',df.values) 3,、獲取df行索引名稱
4,、獲取df列索引名稱# 獲取列索引名稱print('df 的columns:\n',df.columns) 5、獲取df元素個(gè)數(shù)
6,、獲取df每一列的數(shù)據(jù)類型# 獲取數(shù)據(jù)類型print('df 的dtypes:\n',df.dtypes) 7,、獲取df的形狀
8,、獲取df維度# 獲取維度print('df 的ndim:\n',df.ndim) 四、Pandas數(shù)據(jù)存儲(chǔ)與讀取1,、加載文本數(shù)據(jù)(table方式)
2,、加載文本數(shù)據(jù)(csv方式)info = pd.read_csv('xxxx.csv',encoding='ansi',usecols=['phone','name'])print(info)參數(shù): header=infer 自動(dòng)識(shí)別列名 自動(dòng)認(rèn)為第一行為列名 names 設(shè)置列名 接收array 默認(rèn)為None index_col 設(shè)置行索引 如[0,1]是將第0列,第1列作為行索引 nrows 讀取的時(shí)候讀取前n行 usecols 指定讀取的列 ['info_id','use_id'] 3,、excel文件讀取
4、保存數(shù)據(jù)(對(duì)象為df)有多種方式,,這里只演示df.to_excel及pd.to_csv info = pd.to_excel('xxx.xlsx',columns=['detail_id','order_id'],index_label='index_id')print(info)參數(shù): columns 指定需要保存的列 header 保存列索引 index 保存行索引 index_label 給保存好的excel文件的行索引起個(gè)名稱 五,、df數(shù)據(jù)索引取值1、加載數(shù)據(jù)
2,、普通索引獲取單列數(shù)據(jù)pandas獲取數(shù)據(jù),,都是先獲取列,再獲取行(非同時(shí)索引) 數(shù)組是同時(shí)索引(arr[行,,列])
3,、普通索引獲取多列數(shù)據(jù)
4,、loc iloc索引方式(同時(shí)索引)使用方法:detail.loc[行名稱,,列名稱] or detail.iloc[行下標(biāo),列下標(biāo)] 5,、混合索引(ix)ix 混合索引,,既可以使用名稱也可以使用下標(biāo),索引方式同一維度(只能混合,,不能混搭) 從效率上講,,ix最慢 如果數(shù)據(jù)過(guò)大不推薦使用 六、df的修改操作1,、加載數(shù)據(jù)2,、定位sex=男的這一列數(shù)據(jù),返回bool數(shù)組3,、獲取到所有sex=男的所有數(shù)據(jù)4,、重新對(duì)獲取到的這些數(shù)據(jù)進(jìn)行賦值5、不加條件的修改(針對(duì)所有數(shù)據(jù))簡(jiǎn)單修改數(shù)據(jù): 七、df的增加操作1,、加載數(shù)據(jù)2,、增加一個(gè)列,并添加數(shù)據(jù)八,、df的刪除操作
1,、加載數(shù)據(jù)2、刪除列labels 指定列名,,設(shè)置axis=1 3,、刪除行labels 指定行名,設(shè)置axis=0(默認(rèn)) 示例: 九,、Pandas的統(tǒng)計(jì)分析1,、讀取數(shù)據(jù)2、統(tǒng)計(jì)函數(shù)3,、pandas對(duì)于非數(shù)值型數(shù)據(jù)的統(tǒng)計(jì)分析示例1:在detail中哪些菜品最火,?菜品賣出了多少份? 白飯不算菜,,---把白飯刪除,,在統(tǒng)計(jì) 示例2:在detail中哪個(gè)訂單點(diǎn)的菜最多,點(diǎn)了多少份菜,? 十,、Pandas時(shí)間數(shù)據(jù)
1、通過(guò)pd.to_datetime 將時(shí)間點(diǎn)數(shù)據(jù)轉(zhuǎn)化為pandas默認(rèn)支持的時(shí)間點(diǎn)數(shù)據(jù)2,、通過(guò)pd.to_datetime 或者 pd.DatetimeIndex將時(shí)間序列轉(zhuǎn)化為pandas默認(rèn)支持的時(shí)間序列結(jié)構(gòu)示例: 獲取該時(shí)間序列的屬性---可以通過(guò)列表推導(dǎo)式來(lái)獲取時(shí)間點(diǎn)的屬性 3,、時(shí)間的相加減4、時(shí)間差距計(jì)算5,、獲取本機(jī)可以使用的初始時(shí)間和最后可以使用的時(shí)間節(jié)點(diǎn)十一,、Pandas的分組聚合1、讀取數(shù)據(jù)2,、根據(jù)班級(jí)分組,,統(tǒng)計(jì)學(xué)生的平均年齡3、先按照班級(jí)分組,,在按照地址進(jìn)行分組,,求平均年齡4、按照單列進(jìn)行分組,,統(tǒng)計(jì)多個(gè)列的指標(biāo)5,、利用agg,,同時(shí)對(duì)age求平均值,對(duì)USRE_ID求最大值6,、同時(shí)對(duì)age和USER_ID同時(shí)分別求和及均值7,、對(duì)age USER_ID 求取不同個(gè)數(shù)的統(tǒng)計(jì)指標(biāo)8,、自定義函數(shù)進(jìn)行計(jì)算9,、銷售額計(jì)算(以每日分組計(jì)算每天的銷售額)import pandas as pd# detail 有時(shí)間數(shù)據(jù)detail = pd.read_excel('meal_order_detail.xlsx')print('detail:\n',detail)print('detail的列索引名稱:\n',detail.columns)print('detail的形狀:\n',detail.shape)print('detail的列數(shù)據(jù)類型:\n',detail.dtypes)# 計(jì)算每個(gè)彩品的銷售額,增加到detail中detail.loc[:,'pay'] = detail.loc[:,'counts'] * detail.loc[:,'amounts']print(detail)# 獲取時(shí)間點(diǎn)的日屬性# 必須pandas默認(rèn)支持的時(shí)間序列類型detail.loc[:,'place_order_time'] = pd.to_datetime(detail.loc[:,'place_order_time'])# 以列表推導(dǎo)式獲取日屬性detail.loc[:,'day'] = [i.day for i in detail.loc[:,'place_order_time']]print(detail)# 以日分組res = detail.groupby(by='day')['pay'].sum()print(res) 十二,、Pandas透視表與交叉表1,、加載數(shù)據(jù)2、透視表創(chuàng)建
3,、交叉表 mini版的透視表十三、Pandas數(shù)據(jù)去重與相關(guān)性衡量1,、加載數(shù)據(jù)2,、對(duì)指定數(shù)據(jù)去重參數(shù): subset---指定要去重的數(shù)據(jù) 只有同列才能進(jìn)行去重 3、數(shù)據(jù)相關(guān)性衡量十四,、DataFrame數(shù)據(jù)拼接1,、加載數(shù)據(jù)2、concat方式基于行方向連接
3,、concat方式基于列方向連接
4,、merge方式連接
十五,、DataFrame數(shù)據(jù)填充十六,、缺失值處理1、缺失值檢測(cè)2,、刪除法處理缺失值
3,、填充法處理缺失值
4,、插值法處理缺失值
線性插值: 多項(xiàng)式插值: 樣條插值: 十七,、異常值處理
箱線圖異常處理:import pandas as pdimport numpy as np# 箱線圖分析arr = pd.DataFrame(np.array([1,2,3,4,5,6,7,8,9,100]))print(arr.quantile(0.1))# 75% 的數(shù) qu# 25% 的數(shù) ql# iqr = qu - ql# 上限:qu + 1.5 * iqr# 下限:ql - 1.5 * iqrdef box_analysis(data): ''' 進(jìn)行箱線圖分析,,剔除異常值 :param data: series :return: bool數(shù)組 ''' qu = data.quantile(0.75) ql = data.quantile(0.25) iqr = qu - ql # 上限 up = qu + 1.5 * iqr # 下限 low = ql - 1.5 * iqr # 進(jìn)行比較運(yùn)算 bool_id_1 = data <= up bool_id_2 = data >= low bool_num = bool_id_1 & bool_id_2 return bool_num# 加載數(shù)據(jù)detail = pd.read_excel('meal_order_detail.xlsx',sheetname=0)bool_num = box_analysis(detail.loc[:,'amounts'])detail = detail.loc[bool_num,:]print(detail.shape)# quantile 參數(shù)為[0,1]的小數(shù)---返回分位數(shù),series類型# percentile 參數(shù)為[0,100]的整數(shù)---返回分位數(shù)的列表 十八,、標(biāo)準(zhǔn)化數(shù)據(jù)標(biāo)準(zhǔn)化數(shù)據(jù)的目的:將數(shù)據(jù)轉(zhuǎn)化為同一量級(jí),,避免量級(jí)對(duì)結(jié)果產(chǎn)生不利的影響,消除量高影響 三種方式: 1,、離差標(biāo)準(zhǔn)化---(x - min)/(max - min)
2,、標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化---(x - mean)/std# 轉(zhuǎn)化完成的數(shù)據(jù)---將數(shù)據(jù)轉(zhuǎn)化到標(biāo)準(zhǔn)差為1,均值為0的一種狀態(tài)def stand_sca(data): ''' 標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化數(shù)據(jù) :param data: 傳入的數(shù)據(jù) :return: 標(biāo)準(zhǔn)化之后的數(shù)據(jù) ''' data = (data - data.mean()) / data.std() return data# 對(duì)異常值不敏感(出場(chǎng)率--使用比較高) 3,、小數(shù)定標(biāo)標(biāo)準(zhǔn)化---x/10^k
4,、三種標(biāo)準(zhǔn)化數(shù)據(jù)函數(shù)應(yīng)用# 加載數(shù)據(jù)detail = pd.read_excel('meal_order_detail.xlsx')# print(detail)print(detail.loc[:,'amounts'].max())print(detail.loc[:,'amounts'].min())# 標(biāo)準(zhǔn)化數(shù)據(jù)# 離差標(biāo)準(zhǔn)化(基本不用)res = min_max_sca(detail.loc[:,'amounts'])# 標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化res = stand_sca(detail.loc[:,'amounts'])# 小數(shù)定標(biāo)標(biāo)準(zhǔn)化res = desc_sca(detail.loc[:,'amounts'])print(res) 十九、數(shù)據(jù)離散化1,、將類別型數(shù)據(jù) 轉(zhuǎn)化為 啞變量矩陣數(shù)據(jù)分析模型中有相當(dāng)一部分的算法模型都要求輸入的特征為數(shù)值型,,但實(shí)際數(shù)據(jù)中特征的類型不一定只有數(shù)值型,還會(huì)存在相當(dāng)一部分的類別型,,這部分的特征需要經(jīng)過(guò)啞變量處理才可以放入模型之中,。 類別型數(shù)據(jù)轉(zhuǎn)化為數(shù)據(jù)值數(shù)據(jù) 2、將連續(xù)型數(shù)據(jù)進(jìn)行離散化---進(jìn)行分組,,將具體的值轉(zhuǎn)化為區(qū)間數(shù)據(jù)等寬分組(可以發(fā)現(xiàn)等寬分組時(shí)分布不均)等頻分組(等頻分組數(shù)據(jù)分組比較均勻)將連續(xù)型數(shù)據(jù)再次轉(zhuǎn)化為啞變量矩陣
|
|
來(lái)自: 網(wǎng)摘文苑 > 《pandas》