做数据分析的同学大部分入门都是从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. 使用 jquery 的 上传文件插件 uploadify 3.1 配合 java 来做一个简单的文件上次功能。并且在界面上有radio 的选择内容也要上传

    使用 jquery 的 上传文件插件 uploadify 3.1 配合 java 来做一个简单的文件上次功能.并且在界面上有radio 的选择内容也要上传 uploadify 插件的 下载和文档地址  ...

  2. Project Euler:Problem 39 Integer right triangles

    If p is the perimeter of a right angle triangle with integral length sides, {a,b,c}, there are exact ...

  3. less循环写css工具类

    //margin-right=================.mr(100); .mr(@n, @i: 1) when (@i =< @n) { .mr-@{i} { margin-right ...

  4. Extensible File System

    An extensible file system format for portable storage media is provided. The extensible file system ...

  5. js小贴士

    1.在js中 定义方法 方法名第一个字母小写.如果是定义类 则第一个字母大学 2.如果想在a标签中点击 触发js方法 而不跳转页面 可以使用类似   <a href="javascri ...

  6. 手把手教你启用Win10的Linux子系统(超详细)

    原文:手把手教你启用Win10的Linux子系统(超详细) 版权声明:转载请保留出处,谢谢! https://blog.csdn.net/zhangdongren/article/details/82 ...

  7. WinEdt && LaTex(五)—— 内容的排版

    1. 无序列表 需要的环境是\begin{itemize} \end{itemize} \begin{itemize} \item hello \item world \end{itemize} 2. ...

  8. python3 基本使用多线程

    #coding=utf-8 import threading #进口threading from time import sleep import time def task1(): print (& ...

  9. Tab选项卡界面(1)

    Tab用一个简单的应用程序接口的标签是集中的界面布局文件的同一页上的接口组件不同的标签.并计划将在主类集中的代码文件.这种方法的优点是,文件在项目数不会被添加,但是,假设Tab接口组件更个性化的标签. ...

  10. 傻瓜突破linux--rootpassword

    破password该方法: 方法1.单用户模式改动 (表示进入到单用户模式) ,按回车键,按b键启动.进入单用户模式.进行password改动,重新启动 init 5 口诀:e2e 空格1 回车b 开 ...