Python唱情歌 2018-09-27 11:21:55 Pandas是什么? 1、一個(gè)強(qiáng)大的分析 結(jié)構(gòu)化數(shù)據(jù) 的工具集 2、基礎(chǔ)是NumPy,提供了 高性能矩陣 的運(yùn)算 3、應(yīng)用在數(shù)學(xué)挖掘,數(shù)據(jù)分析。比如,學(xué)生成績分析,股票數(shù)據(jù)分析等 4、提供數(shù)據(jù)清洗功能 #使用 import pandas as pd Pands數(shù)據(jù)結(jié)構(gòu),主要分為兩種,Series和DataFrame Series 視頻資料學(xué)習(xí)分享 企(Q)鵝群 519970686 1、類似一維數(shù)組的對(duì)象 2、通過list構(gòu)建Series ser_obj = pd.Series(rang(10)) 3、由數(shù)據(jù)和索引組成 索引在左,數(shù)據(jù)在右 索引是自動(dòng)創(chuàng)建的 4、獲取數(shù)據(jù)和索引 ser_obj.index ser_obj.values 5、預(yù)覽數(shù)據(jù)(取前幾個(gè)) ser_obj.head(n) 6、通過索引獲取數(shù)據(jù) ser_obj[1] ser_obj[8] 7、索引與數(shù)據(jù)的對(duì)應(yīng)關(guān)系仍保持在數(shù)組運(yùn)算的結(jié)果中(過濾series中的數(shù)據(jù)) print(ser_obj[ser_obj > 15]) 8、通過dict構(gòu)建Series DataFrame 1、類似多維數(shù)組/表格數(shù)據(jù) 2、每列數(shù)據(jù)可以是不同的類型 3、索引包括行索引和列索引 Index 索引對(duì)象 視頻資料學(xué)習(xí)分享 企(Q)鵝群 519970686 1、Series和DataFrame中的索引都是Index對(duì)象 2、Index具有不可變性(immutable),即Series和DataFrame中的value可以改變,但是索引不可變,保證了數(shù)據(jù)的安全 3、常見的Index種類 Index Int64Index MultiIndex(層級(jí)索引) DatatimeIndex(時(shí)間戳類型) print(type(ser_obj.index)) print(type(df_obj2.index)) print(df_obj2.index) ===================================== <class 'pandas.core.indexes.range.RangeIndex'> <class 'pandas.core.indexes.numeric.Int64Index'> Int64Index([0, 1, 2, 3], dtype='int64') Series數(shù)據(jù)操作 import pandas as pd #index,指定索引名稱 ser_obj = pd.Series(range(5), index = ['a', 'b', 'c', 'd', 'e']) print(ser_obj.head()) # 通過索引取值 ser_obj['label'],ser_obj[pos] print(ser_obj['a']) //通過索引名取值 print(ser_obj[0]) //通過位置索引取值 # 切片索引 print(ser_obj[1:3]) // 前開后閉,即,取到兩個(gè)值 print(ser_obj['b':'d']) //前閉后閉,即,取到三個(gè)值 # 不連續(xù)索引 print(ser_obj[[0, 2, 4]]) // 內(nèi)部是list print(ser_obj[['a', 'e']]) //內(nèi)部是list # 布爾索引 ser_bool = ser_obj > 2 print(ser_bool) print(ser_obj[ser_bool]) print(ser_obj[ser_obj > 2]) DataFrame數(shù)據(jù)操作 import numpy as np # colmns 指定列名 df_obj = pd.DataFrame(np.random.randn(5,4), columns = ['a', 'b', 'c', 'd']) print(df_obj.head()) # 列索引 print('列索引') print(df_obj['a']) # 返回Series類型 print(type(df_obj)) # 返回DataFrame類型 # 不連續(xù)索引 print('不連續(xù)索引') print(df_obj[['a','c']]) # 返回第一列和第三列 索引操作總結(jié) Pandas的索引操作可歸納為3種 .loc:標(biāo)簽索引(標(biāo)簽的切片索引是包含末尾位置的,上面的前閉后閉) .iloc: 位置索引 .ix: 標(biāo)簽與位置混合索引 -------------先按標(biāo)簽索引嘗試操作,然后再按照位置索引嘗試操作 # 標(biāo)簽索引 loc # Series print(ser_obj['b':'d']) print(ser_obj.loc['b':'d']) # DataFrame print(df_obj['a']) print(df_obj.loc[0:2, 'a']) # 整型位置索引 iloc print(ser_obj[1:3]) print(ser_obj.iloc[1:3]) # DataFrame 第一個(gè)參數(shù),表示的是第1行和第二行,第二個(gè)0表示的哪一列 print(df_obj.iloc[0:2, 0]) # 注意和df_obj.loc[0:2, 'a']的區(qū)別 運(yùn)算與對(duì)齊 按索引對(duì)齊運(yùn)算,沒對(duì)齊的位置補(bǔ)NaN s1 = pd.Series(range(10, 20), index = range(10)) s2 = pd.Series(range(20, 25), index = range(5)) # Series 對(duì)齊運(yùn)算,Series按行索引對(duì)齊,沒對(duì)齊的位置補(bǔ)NaN print(s1 + s2) ================================================== 0 30.0 1 32.0 2 34.0 3 36.0 4 38.0 5 NaN 6 NaN 7 NaN 8 NaN 9 NaN ================================================ import numpy as np df1 = pd.DataFrame(np.ones((2,2)), columns = ['a', 'b']) df2 = pd.DataFrame(np.ones((3,3)), columns = ['a', 'b', 'c']) # DataFrame對(duì)齊操作 print(df1 + df2) ============================= a b c 0 2.0 2.0 NaN 1 2.0 2.0 NaN 2 NaN NaN NaN ================================ # 填充未對(duì)齊的數(shù)據(jù)進(jìn)行運(yùn)算 #使用add,sub,div,mul;同時(shí)通過fill_value指定填充值 s1.add(s2, fill_value = 1) df1.sub(df2, fill_value = 2.) # 填充NaN s3 = s1 + s2 s3_filled = s3.fillna(-1)//把所有的NaN使用-1填充 df3 = df1 + df2 df3.fillna(100, inplace = True)//把所有的NaN使用100填充 函數(shù)應(yīng)用 # Numpy ufunc 函數(shù) df = pd.DataFrame(np.random.randn(5,4) - 1) #求絕對(duì)值,作用于df中每個(gè)數(shù)據(jù) print(np.abs(df)) # 使用apply應(yīng)用行或列數(shù)據(jù) #如果沒有指定axis方向,默認(rèn)按列,axis =0 print(df.apply(lambda x : x.max())) # 指定軸方向 print(df.apply(lambda x : x.max(), axis=1)) # 使用applymap應(yīng)用到每個(gè)數(shù)據(jù) f2 = lambda x : '%.2f' % x print(df.applymap(f2)) 排序 s4 = pd.Series(range(10, 15), index = np.random.randint(5, size=5)) # 索引排序 s4.sort_index() df4 = pd.DataFrame(np.random.randn(3, 4), index=np.random.randint(3, size=3), columns=np.random.randint(4, size=4)) df4.sort_index(axis=1) # 按值排序 sort_values(by='label') df4.sort_values(by=1) 處理缺失數(shù)據(jù) 視頻資料學(xué)習(xí)分享 企(Q)鵝群 519970686 import numpy as np df_data = pd.DataFrame([np.random.randn(3), [1., np.nan, np.nan], [4., np.nan, np.nan], [1., np.nan, 2.]]) df_data.head() # isnull df_data.isnull() # dropna 丟棄缺失數(shù)據(jù) df_data.dropna() #df_data.dropna(axis=1) # fillna 填充缺失數(shù)據(jù) df_data.fillna(-100.) |
|