數據分析——pandas

前言:python數據分析的基礎知識,簡單總結,主要是爲了方便本身寫的時候查看(大家可能看不太清楚T^T),發現有用的方法,隨時補充,歡迎指正

數據分析專欄:python

  1. 數據分析——python基礎
  2. 數據分析——numpy
  3. 數據分析——pandas
  4. 數據分析——數據可視化
  5. 數據分析——數據處理實例

數據處理——pandas

一、序列與數據框

1.1序列

series1=pd.Series([1,2,3])
out:  0 1
	  1 2
	  2 3----->這就是序列
series2=pd.Series({'a':1,'b':2})

序列的索引相似於一維數組
seres1.set_index('Day', inplace=True)//設置新的索引
series1[[0,1]]
out: 0 1
	 1 2

1.2數據框

三種方式:
一、嵌套列表
pd.DataFrame([['張三','23'],['李四','25']])
out:      0      1
     0   張三    23
     1   李四    25
     
二、字典
pd.DataFrame({'姓名':['張三','李四'],'年齡':[23,25]})

三、二維數組
pd.DataFrame(np.array([['張三','23'],['李四','25']]))

二、數據的讀取

2.1讀取txt和csv

pd.read_tabel(filepath,sep=',',parse,skiprows,nrows)
//參數不少這裏不一一列舉,用的時候能夠查詢資料
pd.read_csv(……)

2.2讀取excel

pd.read_excel(io=filepath,sheetname,header,parse,skiprows)
//參數不少這裏不一一列舉,用的時候能夠查詢資料

三、數據類型的轉換和統計

3.1數據類型的轉換

df.shape//輸出數據的行列數

df.dtypes//輸出每一個數據變量的類型

data['name']=data['name'].astype('str')#數據類型的轉換

pd.to_datatime(2017年10月,format='%Y年%m月')//時間形式的更改

array=df.values   #dataframe轉化成array

df = pd.DataFrame(array)      #array轉df
【注】還有不少,之後我用到會補充!

3.2數據的統計

df.describe()//輸出數值型數據的統計描述

df.describe(include=['object'])//輸出離散型(字符型)數據的統計描述

df['price'].std()//計算列的標準差

df['price'].cov(df['point'])// 計算兩個字段間的協方差

df['price'].corr(df['point']) #相關係數在-1到1之間,接近1爲正相關,接近-1爲負相關,0爲不相關

df['name'].value_counts()#詞頻統計

df.loc[df['number']>10]#篩選指定條件的行

df.iloc[:3,:2] #冒號先後的數字再也不是索引的標籤名稱,而是數據所在的位置,從0開始,前三行,前兩列。只能用於整數索引

df_inner.iloc[[0,2,5],[4,5]] #提取第0、二、5行,四、5列

df.set_index('列名')#將列轉換成行索引

df.columns=['公司','時間','地點','學校','地點','點擊量']#設置列名

append方法:
a = {"x":1,"y":2}
data = data.append(a,ignore_index=True)

按指定列排序
DataFrame.sort_values(by=‘##’,axis=0,ascending=True, inplace=False, na_position=‘last’)
axis=0表示列
axis=1表示行

3.3數據處理

>>重複值處理
	any(df.duplicated())//檢測是否有重複值
	df.drop_duplicates(inplace=Ture)//刪除重複項
	
>>缺失值處理
	any(df.isnull()//檢測是否有缺失值
	一、刪除有缺失值的行
		df.dropna()
		
	二、刪除變量(列)
		df.drop('age',axis=1)
		
	三、替換
		df.fillna(method='ffill')//前向替換
		df.fillna(method='bfill')//後向替換
		df.fillna(value=0)//常數替換
		df.fillna(value={'a':df.a.mode()[0]})//統計值替換
		
>>異常值處理
	一、標準差法
		xbar=df.num.mean()//獲取平均值
		xstd=df.num.std()//獲取標準差
		any(df.num>xbar+2*xstd)//上限檢測
		any(df.num<xbar-2*xstd)//下限檢測
			
	二、箱線圖法
		Q1=df.num.quantile(q=0.25)//第一分位數
		Q3=df.num.quantile(q=0.75)//第三分位數
		IQR=Q3-Q1
		any(df.num>Q3+1.5*IQR)//上限檢測
		any(df.num>Q1+1.5*IQR)//下限檢測

	三、替換法處理異常值
		UL=Q3+1.5*IQR//異常值判別上限
		replace_value=df.num[df.num<UL].max()//找出低於判別上限的最大值
		df.num[df.num>UL]=replace_value//替換

四、數據子集的獲取與儲存

4.1數據子集的獲取

//取中間三行,返回姓名和年齡兩列
df.iloc[1:4,[0,2]]
df.loc[1:3,['name','age']]
df.ix[1:3,[0,2]]

4.2數據的存儲

*寫入excel
	df.to_excel('name1.xlsx', sheet_name='name2') 

*寫入csv
	df.to_csv('name.csv')

五、表的合併與鏈接

一、合併函數concat
	pd.concat([df1,df2],axis=0,join='outer',join_axes=None,ingnore_index=False,keys=None])
	axis=0/1表示按照行/列合併
	join=‘outer/inner’表示合併全部數據或者公共部分數據
	ingnore_index是否生成新索引
	keys爲合併後的數據添加新索引
	
二、鏈接函數merge
	pd.merge(left,right,how='inner',on=None,left_on=None,right_on=None)
	left表示主表
	right表示副表
	how表示鏈接方式inner、left、right、outer
	left_on表示主表的共同字段
	right_on表示副表的共同字段
相關文章
相關標籤/搜索