pandas學習(常用數學統計方法總結、讀取或保存數據、缺省值和異常值處理)
目錄
常用數學統計方法總結
讀取或保存數據 缺省值和異常值處理
常用數學統計方法總結
count 計算非NA值的數量 describe 針對Series或DataFrame列計算統計 min/max/sum 計算最小值 最大值 總和 argmin argmax 計算能夠獲取到最小值和最大值的索引位置(整數) idxmin idxmax 計算能夠獲取到最小值和最大值的索引值 quantile 計算樣本的分位數(0到1) mean 值的平均數 median 值的中位數 mad 根據平均值計算平均絕對距離差 var 樣本數值的方差 std 樣本值的標准差 cumsum 樣本值的累計和 cummin cummax 樣本的累計最小值 最大值 cumprod 樣本值的累計積 pct_change 計算百分數變化
讀取或保存數據
讀取數據
pandas可以從外部獲取數據,構建數據對象,例如xlsx后綴的ececl文件,csv文件,txt文本等
下面以txt文件舉例:
先創建txt文本
讀取txt文本數據
#讀取txt文件 import pandas as pd # df = pd.read_csv('data1.txt',sep=':') #默認sep=','以什么分割數據,默認逗號 # print("data01.csv文件的原始數據==========================") # print(df) df = pd.read_csv('data1.txt',sep=':',header=None) #默認sep=',',header:去除表頭,添加默認下標 print("data01.csv文件的原始數據==========================") print(df)
#讀取excel文件
# df=pd.read_excel('data2.xlsx')
# print(df)
0 1 2 0 張伊曼 27 90 1 張巧玲 27 90 2 張詩詩 27 90 3 張思思 27 90
保存數據
df.to_csv('data1.csv') #保存為csv文件
df.to_excel('data2.xlsx') #保存為xlsx
缺省值和異常值處理
缺省值
什么是缺省值
null/None/NaN null經常出現在數據庫中 None是python中的缺失值,類型是NoneType NaN也是python中的缺失值,意思是不是一個數字,類型是float 在pandas和Numpy中會將None替換為NaN,而導入數據庫中的時候則需要把NaN替換成None
缺失值處理方法 pandas中缺省值NaN的4種處理方法:1 isnull 2 notnull 3 dropna 4 fillna 方法 說明 dropna 根據標簽中的缺失值進行過濾,刪除缺失值 fillna 對缺失值進行填充 isnull 返回一個布爾值對象 ,判斷 哪些值是缺失值 notnull isnull的否定式
判斷缺省值
import numpy as np import pandas as pd df = pd.DataFrame(np.arange(12).reshape(3,4),index=['a','b','c'],columns=['A', 'B', 'C', 'D']) # print(df) #判斷全部值的缺省值 d1=df.isnull() print(d1) #在某行中判斷缺省值 d2=df[0:1].isnull() print(d2) #在某列中# 'A'列判斷缺省值 d3=df['A'].isnull() print(d3)
A B C D a 0 1 2 3 b 4 5 6 7 c 8 9 10 11
A B C D a False False False False b False False False False c False False False False
A B C D a False False False False
a False b False c False Name: A, dtype: bool
刪除缺省值
常用參數解釋: how:'all',刪除全為空值的行或列 inplace=True:覆蓋之前的數據 axis=0:選擇行或列
import numpy as np import pandas as pd dict0 = { '語文': [90, 80, 60], '數學': [99, 70, 89], '外語': [98, 10, 75], '物理': 90 } df0 = pd.DataFrame(dict0) # df0['數學'][1] = np.nan # print("df0原數據===============================") print(df0) print("df0.dropna()===============================") print(df0.dropna()) #默認刪除有缺省值所在的行 print("df0.dropna(axis=1)===============================") print(df0.dropna(axis=1)) #默認刪除有缺省值所在的列 print("df0.dropna(how='all',axis=1)===============================") df0.ix[1] = np.nan print(df0.dropna(how='all')) #當所有元素是缺省值的時候 才刪除 print("df0.dropna(how='any',axis=1)===============================") df0['外語'][0] = np.nan print(df0.dropna(how='any')) #當所有元素有一個是缺省值的時候 才刪除
語文 數學 外語 物理 0 90 99.0 98 90 1 80 NaN 10 90 2 60 89.0 75 90 df0.dropna()=============================== 語文 數學 外語 物理 0 90 99.0 98 90 2 60 89.0 75 90 df0.dropna(axis=1)=============================== 語文 外語 物理 0 90 98 90 1 80 10 90 2 60 75 90 df0.dropna(how='all',axis=1)=============================== 語文 數學 外語 物理 0 90.0 99.0 98.0 90.0 2 60.0 89.0 75.0 90.0
填充缺失值
注意:在這里inplace會修改原始數據,並自動保存
import numpy as np import pandas as pd dict0 = { '語文': [90, 80, 60], '數學': [99, 70, 89], '外語': [98, 10, 75], '物理':None } df0 = pd.DataFrame(dict0) print('df0的原始數據=================================') print(df0) print('將所有的缺省的數據填充為1=================================') print(df0.fillna(1))#參數為填入值,可以為單個值,也可以為列表 print('將找到的缺省數據填充為平均值=================================') print(df0.fillna(df0['語文'].mean()))#結合numpy的數學運算函數,求平均值 print(df0['物理'].fillna(df0['語文'].mean()))#結合numpy的數學運算函數,求平均值,當然pandas自己也有自己的方法
df0的原始數據================================= 語文 數學 外語 物理 0 90 99 98 None 1 80 70 10 None 2 60 89 75 None 將所有的缺省的數據填充為1================================= 語文 數學 外語 物理 0 90 99 98 1 1 80 70 10 1 2 60 89 75 1 將找到的缺省數據填充為平均值================================= 語文 數學 外語 物理 0 90 99 98 76.666667 1 80 70 10 76.666667 2 60 89 75 76.666667 0 76.666667
異常值處理
異常值就是與你想要獲取的值偏差太大或者不是想要的值
先用條件判斷篩選出來
再進行怎樣的處理看需要
數據去重
unique方法用於獲取Series或DataFrame某列中的唯一值數組(去重數據后的數組) value_counts方法用於計算一個Series或DataFrame某列中各值的出現頻率 isin方法用於判斷矢量化集合的成員資格,是否在里面,可用於選取Series中或DataFrame列中數據的子集
另外也可以使用replace方法進行替換
這里演示的是Series類型數據
import numpy as np import pandas as pd s1 = pd.Series(['a', 'b', 'c', 'b', 'a']) print("s1的原始數據==============================") print(s1) # print("數據去重方法:s1.unique()==============================") print(s1.unique()) #注意:s1.unique()返回的類型也是Series # print("單個值出現的個數:s1.value_counts()['a']==============================") print(s1.value_counts()['a']) # print("值是否存在的方法:s1.isin(['a', 'b'])==============================") print(s1.isin(['a', 'b']))
#print('替換方法================================')
#print(s1[0].replace['e'])
s1的原始數據============================== 0 a 1 b 2 c 3 b 4 a dtype: object 數據去重方法:s1.unique()============================== ['a' 'b' 'c'] 單個值出現的個數:s1.value_counts()['a']============================== 2 值是否存在的方法:s1.isin(['a', 'b'])============================== 0 True 1 True 2 False 3 True 4 True dtype: bool