首页 > 代码库 > python之数据分析pandas

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(rE:\log\token0722.xlsx,Sheet1) #读取csv文件 df=pd.read_csv(rE:\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(rE:\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=http://www.mamicode.com/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