python之数据分析pandas
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之数据分析pandas相关的知识,希望对你有一定的参考价值。
做数据分析的同学大部分入门都是从excel开始的,excel也是微软office系列评价最高的一种工具。
但当数据量很大的时候,excel就无能无力了,python第三方包pandas极大的扩展excel的功能,入门需要花费一点时间,但是真的是做大数据的必备神器!
1.从文件读数据
pandas支持多种格式数据的读取,当然最常见的是excel文件、csv文件和TXT文件。
names指定列名,delimiter指定列之间的分隔符
文件名前最好加‘r’,代表不转义。
import numpy as np import 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文件,保留index groupd.mean().to_csv(‘E:\log\channel_add\group10.csv‘,index=True) #输出到excel文件 df3=pd.to_excel(r‘E:\log\token0722v1.xlsx‘) #保存到csv文件,不保留index df.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‘] = 0 df.iat[0,1] = 0 # 对列去重 df.drop_duplicates() # 删掉任意有缺省值的行 df1.dropna(how=‘any‘) # 填充缺失值 df1.fillna(value=5) # 将一行增加到df df.append() # 转换数据结构,将数据改变成记录式 stacked = df2.stack() # 将记录数据改成行列式 stacked.unstack() # 赋值 df.ix[1:3,[‘B‘,‘C‘]] = 1.0 f=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.index
df.columns
df.values
df.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‘) # 按行链接各部分组成新的dataframe dfs1=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的主要内容,如果未能解决你的问题,请参考以下文章
pandas GroupBy上的方法apply:一般性的“拆分-应用-合并”