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)
def save_excel(dst_file, sheet_data_list, sheet_name_list):
writer = pd.ExcelWriter(dst_file, engine='xlsxwriter')
for sheet_data, sheet_name in zip(sheet_data_list, sheet_name_list):
sheet_data.to_excel(writer, sheet_name=sheet_name, index=False, encoding='utf8')
writer.save()
writer.close()
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['':'',['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'])
10.单列数据的运算
单列数据可以进行简单的sum(),count(),mean(),max(),min()等运算。
df['num'].sum()
df['num'].count()
df['num'].mean()
df['num'].max()
df['num'].min()
11.apply
def table_name_merge(data_frame, db2, table2):
db_name = data_frame[db2]
table_name = data_frame[table2]
... df['table_name_2'] = df.apply(table_name_merge,axis=1, args=('db', 'table'))
12.row_num
df26['row_num'] = df26['交易金额2'].groupby(df26['供应商id']).rank(ascending='desc', method='first')
13.collect_set
data2 = df.groupby('url', as_index=False)['type'].agg(lambda x: x.str.cat(sep=','))
python之数据分析pandas的更多相关文章
- 利用Python进行数据分析——pandas入门
利用Python进行数据分析--pandas入门 基于NumPy建立的 from pandas importSeries,DataFrame,import pandas as pd 一.两种数据结构 ...
- 利用Python进行数据分析-Pandas(第一部分)
利用Python进行数据分析-Pandas: 在Pandas库中最重要的两个数据类型,分别是Series和DataFrame.如下的内容主要围绕这两个方面展开叙述! 在进行数据分析时,我们知道有两个基 ...
- 利用Python进行数据分析-Pandas(第六部分-数据聚合与分组运算)
对数据集进行分组并对各组应用一个函数(无论是聚合还是转换),通常是数据分析工作中的重要环节.在将数据集加载.融合.准备好之后,通常是计算分组统计或生成透视表.pandas提供了一个灵活高效的group ...
- 利用Python进行数据分析-Pandas(第四部分-数据清洗和准备)
在数据分析和建模的过程中,相当多的时间要用在数据准备上:加载.清理.转换以及重塑上.这些工作会占到分析时间的80%或更多.有时,存储在文件和数据库中的数据的格式不适合某个特定的任务.研究者都选择使用编 ...
- python做数据分析pandas库介绍之DataFrame基本操作
怎样删除list中空字符? 最简单的方法:new_list = [ x for x in li if x != '' ] 这一部分主要学习pandas中基于前面两种数据结构的基本操作. 设有DataF ...
- 利用Python进行数据分析-Pandas(第七部分-时间序列)
时间序列(time series)数据是一种重要的结构化数据形式,应用于多个领域,包括金融学.经济学.生态学.神经科学.物理学等.时间序列数据的意义取决于具体的应用场景,主要有以下几种: 时间戳(ti ...
- 利用Python进行数据分析-Pandas(第五部分-数据规整:聚合、合并和重塑)
在许多应用中,数据可能分散在许多文件或数据库中,存储的形式也不利于分析.本部分关注可以聚合.合并.重塑数据的方法. 1.层次化索引 层次化索引(hierarchical indexing)是panda ...
- 利用Python进行数据分析-Pandas(第三部分)
访问数据是使用本书所介绍的这些工具的第一步.这里会着重介绍pandas的数据输入与输出,虽然别的库中也有不少以此为目的的工具. 输入输出通常可以划分为几个大类:读取文本文件和其他更高效的磁盘存储格式, ...
- 利用Python进行数据分析-Pandas(第二部分)
上一个章节中我们主要是介绍了pandas两种数据类型的具体属性,这个章节主要介绍操作Series和DataFrame中的数据的基本手段. 一.基本功能 1.重新索引 pandas对象的一个重要方法是r ...
随机推荐
- mkdir-无法创建目录(单层目录中子目录的个数默认为32000个)
今天运行在一台机器上的脚本突然通知无法创建目录了,上去执行shell脚本,也出现同样的错误,如下: $ mkdir test mkdir: 无法创建目录"test": 过多的连接 ...
- Bitmap,byte[],Drawable相互转化
1.Drawable就是一个可画的对象.其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable).还有可能是一个图层(LayerDrawable),我们依据绘图 ...
- Linux socket编程示例(最简单的TCP和UDP两个例子)
一.socket编程 网络功能是Uinux/Linux的一个重要特点,有着悠久的历史,因此有一个非常固定的编程套路. 基于TCP的网络编程: 基于连接, 在交互过程中, 服务器和客户端要保持连接, 不 ...
- 认识ADO.net
这篇文章源自对刘皓的文章的学习 ADO.NET入门教程(一) 初识ADO.NET 这篇文章非常好,用一张图,以及对图的解释介绍了ado.net组件 ado.net内部主要有两个部分 dataProvi ...
- 自学 Python
如何系统地自学 Python? 最近开始系统的学习Python,以及整理的一些资料.github记录着个人自学 Python 的过程,持续更新.欢迎大家一起来完善这个自学Python学习的项目,给 ...
- Ubuntu logomaker sh: 1: pngtopnm: not found 解决方案
暂时未找到logomaker的方法,来解决 命令替换,在文件夹: pngtopnm open_show.png > temp.ppm ppmquant 224 temp.ppm >temp ...
- Ubuntu更改 resolv.conf 重启失效
更改Ubuntu的 resolv.conf的时候,重启的时候,经常又给重置了.google大法找到方法. sudo apt-get install resolvconf 原来Ubuntu的resol ...
- AngularJS $http和$.ajax
$http请求 $http请求返回之后,给前台绑定数据赋值,会自动更新数据 ajax请求 $.ajax请求返回之后,给前台绑定数据赋值,不会自动更新数据,需要用$scope.$apply手动刷新 ap ...
- WPF路由
举例:窗口-用户控件-布局控件-…-按钮 按钮的点击事件:先由按钮的Click相应,然后….,然后布局控件,然后用户控件,然后窗口类似异常,直到“处理完成”(实际上一般按钮自己处理即可) 路由事件 ...
- 调用API函数减少c#内存占用(20+m减至1m以下)
原文:调用API函数减少c#内存占用(20+m减至1m以下) c#虽然内置垃圾回收机制,但是并不能解决程序占用内存庞大的问题,如果我们仔细观察任务管理器,我们会发现一个程序如果最小化的时候,它所占用的 ...