Python实现EXCEL的常规操作 一、导入数据源 #导入相关库 import pandas as pd import numpy as np import os from pandas import DataFrame,Series import re df =pd.read_csv(r’E:\work\daima\python\forestfires.csv’) #打开文件 导入数据的方式有很多种,我们这里只介绍其中一种;
二、数据基本处理 1)查看列名和数据类型 print(df.columns) #查看列名 print(df.dtypes) #查看各列数据类型
2)查看指定行列数据 print(df.head(20)) #查看前20行数据 df=df.loc[:,‘FFMC’:‘rain’] #选择FFMC到rain列所有数据
3)删除行或列 df=df.drop([‘wind’, ‘rain’, ‘area’],axis=1) #删除wind,rain和area三列 df_an=df_an.loc[-(df_an[‘qudao’]==‘Total’)] #删除qudao列等于’Total’的行
4)移除重复数据
df_new=df.drop_duplicates([‘month’,‘day’]) #移除month和day列包含重复值得行,保留第一个 df_new=df.drop_duplicates([‘month’],take_last=True )#移除month列包含重复值得行,保留最后一个
5)更改列名 df.rename(columns={‘ISI’:‘isi’}, inplace = True) #ISI列列名改为isi
三、描述性统计 1)计算某列变量频数 print(df[‘month’].unique()) #输出month列唯一值 print(df[‘month’].value_counts()) #输出month列各变量出现频数
2)分段统计 bins=[0,10,20,30,40,50,60,70,80,90,100] group_names=[‘0-10’,‘10-20’,‘20-30’,‘30-40’,‘40-50’,‘50-60’,‘60-70’,‘70-80’,‘80-90’,‘90-100’] cats=pd.cut(df[‘RH’],bins,labels=group_names) pd.value_counts(cats,sort=False)
3)添加一列分组列,做多维频数统计 bins=[0,10,20,30,40,50,60,70,80,90,100] group_names=[‘0-10’,‘10-20’,‘20-30’,‘30-40’,‘40-50’,‘50-60’,‘60-70’,‘70-80’,‘80-90’,‘90-100’] cats=pd.cut(df[‘RH’],bins,labels=group_names) df_concat=pd.concat([df,cats],axis=1,ignore_index=True) df_group=df_concat[7].groupby([df_concat[0],df_concat[6],df_concat[7]]) df_fum=df_group.agg(‘count’)
四、缺失值处理 1、缺失值统计 1)显示有缺失值的行 df[df.isnull().values==True] #显示有缺失值的行
2)增加一列,显示每行的缺失值 df_na=(df.isnull()).sum(axis=1) #统计每行的缺失值 df=pd.concat([df,df_na],axis=1) #df和df_na横向拼接 df.rename(columns={0:‘na_num’}, inplace = True) #更改列名 df=df.loc[df[‘na_num’]<=5]#删去变量值大于5的行
2、填充缺失值 1)删除含有缺失值的行(或者全为NA的行) df.dropna()#删除含有缺失值的行 df.dropna(how=‘all’)#只丢弃全为NA的那些行
2)填充固定值 train_data.fillna(0, inplace=True) # 填充 0
3)填充均值 df[‘DC’].fillna(df[‘DC’].mean(),inplace=True) # 填充均值
4)填充中位数 df[‘DC’].fillna(df[‘DC’].median(),inplace=True) #DC列缺失值填充为DC列的中位数
5)填充上下条的数据 df[‘DC’].fillna(method=‘pad’, inplace=True) df[‘DC’].fillna(0, inplace=True)# 前一条没值就填充0 df[‘DC’].fillna(method=‘bfill’, inplace=True) df[‘DC’].fillna(0, inplace=True)# 后一条没值就填充0
五、筛选 1)条件筛选loc df_sel=df.loc[(df[‘month’]==‘aug’) & (df[‘DC’]>=600)] #筛选month列等于aug且DC列大于600的所有行
2)筛选并给新列赋值 这个多用于区间匹配,例如如果A列(0,100],C列为50;A列大于100 ,C列为A列的值 df.loc[(df[‘DC’]>0) & (df[‘DC’]<=100) ,‘DC_na’]=50 # 创建新列DC_na,DC列大于0且小于等于100,DC列为50 df.loc[df[‘DC’]>100,‘DC_na’]=df[‘DC’]# 创建新列DC_na,DC列大于100等于原值,其他为NA
六、替换 1)去掉字符串两端空格 df_city[‘experience_new’] = df_city[‘experience’].map(lambda s: s.strip())#experience列中文前后端包含空格,需对改列进行分词处理(去掉空格),赋值给新列experience_new
2)替换 #将experience_new列中的应届毕业生替换为1年以下 df_city = df_city.replace({‘experience_new’:‘应届毕业生’},‘1年以下’) df_city[‘expreienct_new’]=df_city[‘expreienct_new’].map(lambda s:re.sub(‘应届毕业生’,‘1年以下’,s))
七、排序 按照DMC列降序,DC列升序对数据集进行排序 df_paixu=df.sort_values(by=[‘DMC’,‘DC’],ascending=[0,1])
八、关联 1)左关联、右关联 df_merge=pd.merge(df1,df2,on=‘customer_id’,how=‘left’) #左关联 print(df_merge)
2、多表进行关联 1)轴向连接:concat() pd.concat([df1,df2],axis=1,ignore_index=True)#df1和df2横向拼接
2)多表关联:reduce() from functools import reduce df_list=[df_dau,df_gmv_zx,df_dau_zx] df_zhengti=reduce(lambda left,right:pd.merge(left,right,on=[‘event_date’,‘duan’],how=‘left’),df_list) #按照event_date,duan 从左到右对df_list中的文件进行左关联
九、聚合 聚合groupby() df_group=df[‘DC’].groupby([df[‘month’],df[‘day’]]) #根据month和day列对DC列进行聚合 df_fun=df_gorup.agg([‘sum’,‘mean’,‘std’]) #对df_group求和,均值和标准差 print(df_fun)
十、数据透视表pd.pivot_table() 这个函数比较难记,可以参考EXCEL数据透视表去理解,index代表列,columns代表行,values代表值,aggfunc代表要对值用什么函数,fil_value代表缺失值用0填充; df_toushi=pd.pivot_table(df,index=[‘month’],columns=[‘day’], values=[‘DC’],aggfunc=[np.sum,np.mean],fill_value=0) print(df_toushi)