資料分析(五)
週末,終於閒了下來。突然想起資料分析的知識還沒整理完。好吧,廢話就不多說了,我們繼續總結相關的知識點。
前面學了series和dataframe,今天我們先說說他們的運算:
【重要】
使用Python操作符:以行為單位操作,對所有行都有效。(類似於numpy中二維陣列與一維陣列的運算,但可能出現NaN)
使用pandas操作函式:
axis=0:以列為單位操作(引數必須是列),對所有列都有效。
axis=1:以行為單位操作(引數必須是行),對所有行都有效。
例子
1.假設ddd1是期中考試成績,ddd2是期末考試成績,請自由建立ddd2,並將其與ddd1相加,求期中期末平均值。
2.假設張三期中考試數學被發現作弊,要記為0分,如何實現?
3.李四因為舉報張三作弊立功,期中考試所有科目加100分,如何實現?
4.後來老師發現有一道題出錯了,為了安撫學生情緒,給每位學生每個科目都加10分,如何實現?
ddd1=DataFrame(data=np.random.randint(0,150,size=(3,3)),index=['張三','李四','王五'],columns=['語文','數學','英語']) ddd1#檢視輸出結果 ddd2 = DataFrame(data=np.random.randint(0,150,size=(3,3)),index=['張三','李四','王五'],columns=['語文','數學','英語']) ddd2 (ddd1+ddd2)/2 #算平均分 ddd1.loc['張三','數學']=0 #張三期中數學為0分 ddd1 ddd1.loc['李四']+=100 #李四各科成績均加100分 ddd1 ddd1+=10 #安撫情緒,加十分 ddd1
閾值判斷
ddd1>100
dataframe和numpy都可以 判斷 然後返回 布林值的資料
空值
一、有兩種丟失資料:
None: Python自帶的資料型別 不能參與到任何計算中
np.nan: float型別 能參與計算,但結果總是nan
二、np.nan(NaN)
陣列直接運算會得到nan,但可以使用np.nan*()函式來計算nan,此時視nan為0。
ndarr = np.array([1,2,3,np.nan])
np.sum(ndarr)
np.nansum(ndarr)
Series和DataForm可以直接處理nan
s1 = Series([1,2,3,np.nan]) s1 s1.sum() df1 = DataFrame([1,2,3,np.nan]) df1 df1.sum()
三、pandas中的None與NaN
s1 = Series([1,2,3,np.nan,None]) #
s1
df1 = DataFrame([1,2,3,np.nan,None]) # Series和DataFrame都會自動把None轉換成NaN 然後 運算的時候會把NaN當成0
df1
四、空值檢測與控制處理
空值檢測:
isnull()
notnull()
snull配合any使用,可以檢視每一行是否存在空值
可以控制axis改變方向,檢視某一列是否存在空值
df.isnull() # 是空值就是True否則就是False
# df.isnull().any() # 檢視某一列是否有空值
# df.isnull().any(axis=1) # 檢視某一行(樣本)是否有空值
空值過濾
dropna()
可以選擇過濾的是行還是列(預設為行)
df.dropna() # 預設 保留沒有空值的行
也可以選擇過濾的方式 how = ‘all’
#how=‘any’ how用來設定如何刪除
#預設是any 只要有空就刪除
df.dropna(how=‘all’)
空值填充:
fillna()
可以指定value
#value=None
df.fillna(value=50)
也可以選擇從前面找值來填充還是從後面找值來填充
#method指的是 如何對空值進行填充
#'bfill’從後面找值來填充 ffill從前面找值來填充
#df.fillna(method=‘bfill’)
#df.fillna(method=‘ffill’) # 預設是縱向(從相鄰樣本的 同意特徵中找值)
還可以指定是在尋找值時候的軸線
#df.fillna(method='bfill',axis=0) # 豎向
df.fillna(method='bfill',axis=1) # 橫向
fillna()方法總結:
#value=None, method=None, axis=None, inplace=False, limit=None
#value直接指定 用什麼值來填充
#method 指定填充方法
#axis 指定填充值的方向
#inplace 指的是是否對原df進行替換
#limit 限制填充的個數
df.fillna()
pandas的拼接操作
pandas的拼接分為兩種:
級聯:pd.concat, pd.append (沒有重複資料)
合併:pd.merge, pd.join (有重複資料)
簡單級聯
pandas使用pd.concat函式,與np.concatenate函式類似
主要看 objs ignore_index axis 三個引數
不匹配級聯
不匹配指的是級聯的維度的索引不一致。例如縱向級聯時列索引不一致,橫向級聯時行索引不一致
主要看 join keys join_axes 三個引數
使用append()函式新增
由於在後面級聯的使用非常普遍,因此有一個函式append專門用於在後面新增
使用pd.merge()合併
merge與concat的區別在於,merge需要依據某一共同的行或列來進行資料的融合
注意每一列元素的順序不要求一致