做数据分析的同学大部分入门都是从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的更多相关文章

  1. 利用Python进行数据分析——pandas入门

    利用Python进行数据分析--pandas入门 基于NumPy建立的 from pandas importSeries,DataFrame,import pandas as pd 一.两种数据结构 ...

  2. 利用Python进行数据分析-Pandas(第一部分)

    利用Python进行数据分析-Pandas: 在Pandas库中最重要的两个数据类型,分别是Series和DataFrame.如下的内容主要围绕这两个方面展开叙述! 在进行数据分析时,我们知道有两个基 ...

  3. 利用Python进行数据分析-Pandas(第六部分-数据聚合与分组运算)

    对数据集进行分组并对各组应用一个函数(无论是聚合还是转换),通常是数据分析工作中的重要环节.在将数据集加载.融合.准备好之后,通常是计算分组统计或生成透视表.pandas提供了一个灵活高效的group ...

  4. 利用Python进行数据分析-Pandas(第四部分-数据清洗和准备)

    在数据分析和建模的过程中,相当多的时间要用在数据准备上:加载.清理.转换以及重塑上.这些工作会占到分析时间的80%或更多.有时,存储在文件和数据库中的数据的格式不适合某个特定的任务.研究者都选择使用编 ...

  5. python做数据分析pandas库介绍之DataFrame基本操作

    怎样删除list中空字符? 最简单的方法:new_list = [ x for x in li if x != '' ] 这一部分主要学习pandas中基于前面两种数据结构的基本操作. 设有DataF ...

  6. 利用Python进行数据分析-Pandas(第七部分-时间序列)

    时间序列(time series)数据是一种重要的结构化数据形式,应用于多个领域,包括金融学.经济学.生态学.神经科学.物理学等.时间序列数据的意义取决于具体的应用场景,主要有以下几种: 时间戳(ti ...

  7. 利用Python进行数据分析-Pandas(第五部分-数据规整:聚合、合并和重塑)

    在许多应用中,数据可能分散在许多文件或数据库中,存储的形式也不利于分析.本部分关注可以聚合.合并.重塑数据的方法. 1.层次化索引 层次化索引(hierarchical indexing)是panda ...

  8. 利用Python进行数据分析-Pandas(第三部分)

    访问数据是使用本书所介绍的这些工具的第一步.这里会着重介绍pandas的数据输入与输出,虽然别的库中也有不少以此为目的的工具. 输入输出通常可以划分为几个大类:读取文本文件和其他更高效的磁盘存储格式, ...

  9. 利用Python进行数据分析-Pandas(第二部分)

    上一个章节中我们主要是介绍了pandas两种数据类型的具体属性,这个章节主要介绍操作Series和DataFrame中的数据的基本手段. 一.基本功能 1.重新索引 pandas对象的一个重要方法是r ...

随机推荐

  1. PS 滤镜算法— — 表面模糊

    图像的表面模糊处理,其作用是在保留图像边缘的情况下,对图像的表面进行模糊处理.在对人物皮肤处理上,比高斯模糊更有效.因为高斯模糊在使人物皮肤光洁的同时,也将一些边缘特征如脸部的眉毛.嘴唇等给模糊了,不 ...

  2. STL序列式容器之list

    一,list容器基本概念 1.list容器基本知识 list容器的底部数据结构为双向链表,可以高效的进行插入和删除元素. list因为底层数据结构是双向链表,因此不支持下标操作和.at()函数的操作. ...

  3. java 子类重写父类的方法

    若想实现一个合格重写方法,而不是重载,那么必须同时满足下面的要求! A.重写规则之一:重写方法不能比被重写方法限制有更严格的访问级别. (但是可以更广泛,比如父类方法是包访问权限,子类的重写方法是pu ...

  4. 回调函数实现类似QT中信号机制

    1. 定义回调接口类: class UIcallBack { public: virtual void onAppActivated() = 0; virtual void onShowMore()  ...

  5. Matlab Tricks(二十六)—— 置乱(随机化)与恢复(shuffle/permutation & restore)

    x = 1:10; n = length(x); perm = randperm(n); x_perm = x(perm); % x_perm 表示置乱后的结果 x_ori(perm) = x_per ...

  6. Linux性能测试 netstat命令

    功能说明:Netstat用于显示与IP.TCP.UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况.语 法:netstat [-acCeFghilMnNoprstuvVwx][- ...

  7. HTML5逐步实现

    渐变 Context对象能够通过createLinearGradient()和createRadialGradient()两个方法创建渐变对象.这两个方法的原型例如以下: Object createL ...

  8. Qt Installer Framework 3.0.1 Released(功能比较强)

    We are happy to announce the release of Qt IFW 3.0.1. 3.0.1 is fully compatible with 2.0.5, which me ...

  9. c# wpf 利用截屏键实现截屏功能

    原文:c# wpf 利用截屏键实现截屏功能     最近做一个wpf程序需要截图功能,查找资料费了一些曲折,跟大家分享一下.     先是找到了这样一份代码:     static class Scr ...

  10. style文件的指定

    新建资源文件   写资源文件 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/prese ...