標籤:nbsp 類型轉換 產生 data type ace 讀取 var 串連
做資料分析的同學大部分入門都是從excel開始的,excel也是微軟office系列評價最高的一種工具。
但當資料量很大的時候,excel就無能無力了,python第三方包pandas極大的擴充excel的功能,入門需要花費一點時間,但是真的是做大資料的必備神器!
1.從檔案讀資料
pandas支援多種格式資料的讀取,當然最常見的是excel檔案、csv檔案和TXT檔案。
names指定列名,delimiter指定列之間的分隔字元
檔案名稱前最好加‘r’,代表不轉義。
import numpy as npimport pandas as pd
#讀取TXT檔案df=pd.read_table(‘C:\Users\wangbin10\Desktop\jhinfo.txt‘,names=[‘dvid‘,‘cid‘,‘dt‘,‘atimes‘],delimiter=‘\t‘)#讀取excel檔案df=pd.read_excel(r‘E:\log\token0722.xlsx‘,‘Sheet1‘)#讀取csv檔案df=pd.read_csv(r‘E:\log\channel_add\channel_add11.txt‘,names=[‘cha‘,‘dvid‘,‘dt‘,‘act‘,‘isna‘],delimiter=‘\001‘)
2.向檔案寫資料
當我們通過各種透視、切入、轉換得到我們需要的資料,就可以儲存到檔案中。
groupd=df.groupby(‘cid‘)[‘atimes‘]#儲存到csv檔案,保留indexgroupd.mean().to_csv(‘E:\log\channel_add\group10.csv‘,index=True)#輸出到excel檔案df3=pd.to_excel(r‘E:\log\token0722v1.xlsx‘)#儲存到csv檔案,不保留indexdf.to_csv(‘E:\log\lost.txt‘,index=False)
3.資料的篩選
往往我們並不需要檔案中的所有資料,只是需要其中的一部分,pandas提供了很多方式把它切出來
#邏輯篩選df2=df[df[‘cid‘].isin([‘c147‘,‘c148‘])]df2=df[df[‘atimes‘]>1]df2=df[df[‘is_new‘]==‘T‘]#選取index=A 的資料df[‘A‘]#選擇前三行df[0:3]#按位置對行列進行選擇df.iloc[3:5,1:2]df.iloc[[1,2,5],[0,2]df.iat[1,1]#按標籤篩選df.loc[‘20160101‘:‘20160131‘,[‘dt‘,‘atimes‘]]# 複雜篩選data.loc[(data["Gender"]=="Female") & (data["Education"]=="Not Graduate") & (data["Loan_Status"]=="Y"), ["Gender","Education","Loan_Status"]]
4.資料排序
# 按行序號或列序號進行排序df.sort_index(axis=1,ascending=false)# 按值排序df.sort(columns=‘dt‘)data_sorted = data.sort_values([‘ApplicantIncome‘,‘CoapplicantIncome‘], ascending=False)
5.資料轉換
# 強制類型轉換data[row[‘feature‘]]=data[row[‘feature‘]].astype(np.float)#賦值df.at[dates[0],‘A‘] = 0df.iat[0,1] = 0# 對列去重df.drop_duplicates()# 刪掉任意有預設值的行df1.dropna(how=‘any‘)# 填充缺失值df1.fillna(value=5)# 將一行增加到dfdf.append()# 轉換資料結構,將資料改變成記錄式stacked = df2.stack()# 將記錄資料改成行列式stacked.unstack()# 賦值df.ix[1:3,[‘B‘,‘C‘]] = 1.0f=lambda x:x[:7]# 新增一列月份df[‘month‘]=df[‘dt‘].apply(f)# 新增一列用戶端df[‘platform‘]=np.where(df[‘dvid‘].str.len()>=32,‘IOS‘,‘Android‘)# 刪掉某一行,按照index,預設是在行上刪除,刪除列需要指定軸df.drop(index)df.drop(‘dvid‘,axis=1)# 利用where進行產生新欄位os=np.where(df[‘dt‘].str.startswith(‘2016-05‘),‘2016-05‘,‘2016-06‘)# 截取不需要的字串df[‘act2‘]=df[‘act1‘].str.rstrip(‘_ios‘)#利用numpy進行資料轉換df[‘news‘]=np.where(df[‘_c1‘].str.find(‘\"news\"‘)==-1,‘F‘,‘T‘)# 字串分割轉換為列表,並使用函數產生新列df2[‘act‘]=df2[‘act‘].str.split(‘,‘)df2[‘actimes‘]=df2[‘act‘].apply(date_change)# 替換hive特殊符號df[‘act‘]=df[‘act‘].str.replace(‘\002‘,‘,‘)
6.資料概覽
df.head()df.tail()df.indexdf.columnsdf.valuesdf.describe()
7.資料連線合并
# 求兩個資料的交集df=pd.merge(df1,df2,on =‘dvid‘)# 按列合并資料集pd.merge()df4=pd.merge(df2,df3,left_on=[‘dvid‘],right_on=[‘divice_id‘],how=‘left‘)# 按行連結各部分組成新的dataframedfs1=pd.concat([df1,df2,df3,df4,df5])
8.資料彙總
對列atimes按照cid進行彙總,求均值groupd=df.groupby(‘cid‘)[‘atimes‘]groupd.mean()# 按月份和cid進行分組,計算均值groupd=df[‘atimes‘].groupby([df[‘month‘],df[‘cid‘]])# groupby 的其他方式,.count(),sum(),prod(),mean(),min(),max(),std(),var(),first(),last(),describe()也可以自訂函數# 若要觀察多個指標,可使用agg傳入groupd.agg([‘sum‘,‘count‘,‘mean‘])# 也可以通過元組方式對不同欄位進行不同方式彙總groupd.agg([(‘dvid‘,‘sum‘),(‘atimes‘,‘count‘)])# 若對多個列進行多種方式彙總,可以使用下列方式functions=[‘sum‘,‘count‘,‘mean‘]groupd[‘dt‘,‘cid‘].agg(functions)# 調用value_counts函數可以方便對任意列進行計數統計,預設按照降序排列tz_counts=df[‘cid‘].value_counts()
9.樞紐分析表
樞紐分析表是excel的重要功能,pandas也提供了透視表功能。
# 樞紐分析表pv_table=pd.pivot_table(df,index=[‘cid‘],columns=[‘month‘],values=[‘atimes‘],aggfunc=[np.mean])# 交叉表cross_table=pd.crosstab(df[‘cid‘],df[‘month‘])
python之資料分析pandas