做数据分析的同学大部分入门都是从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. jscript的常用文件操作

    作者:朱金灿 来源:http://blog.csdn.net/clever101 1.重命名文件 var fso = new ActiveXObject("Scripting.FileSys ...

  2. linux 命令学习 —— 硬件外设管理(dmesg、lsusb)

    dmesg:print or control the kernel ring buffer dmesg命令设备故障的诊断是非常重要的.在dmesg命令的帮助下进行硬件的连接或断开连接操作时,我们可以看 ...

  3. 一个2013届毕业生(踏上IT行业)的迷茫(1)

    从毕业到现在已经快半年了,已经想写这篇文字很久了,但是一次又一次的被没有时间给搁置了,今天突然好想写一篇自己这么多年的总结,算是一种反思,也可以看作为未来的人生指路吧. 我和很多搞IT的同行们一样,不 ...

  4. Mac的GUI哲学

    GUI 哲学 前些日子,看了 Tinyfool 老师的一篇文章<开发人员为何应该使用 Mac OS X 兼 OS X 小史>,才恍然 Mac 系统可不仅仅是 UI 上与 Windows 大 ...

  5. CCD 与 CMOS

    窗帘快门与全局快门: 窗帘快门,每次只允许一条缝的光线摄入,因此会呈现自上而下的扫描式拍摄,也就意味着画面上的不同高度,其实拍摄的时间是不同的,也就进一步造成了在高速移动的火车上,如果拍摄窗外的景物, ...

  6. CentOS(一) 最小化安装

    /etc/sysconfig/selinux 关闭selinux /etc/sysconfig/network-scripts/网卡   设置onboot=yes service network re ...

  7. 数学公式的规约(reduce)和简化(simplify)

    to simplify notation, 1. 增广(augment) xi=[xi;1],减少一个常数项: 2. 多个求和号 ∥x∥2=xTx 向量 ⇒ 矩阵: 求和号本身也可化为向量矩阵运算: ...

  8. HDU 3172 Virtual Friends 并与正确集中检查 -秩

    ll T; while(~scanf("%d",&T)){ while(T--) { = = ... 思路: 用秩合并,看了题解才发现 if(fx == fy)要输出当前集 ...

  9. Emgu-WPF 激光雷达研究-移动物体检测

    原文:Emgu-WPF 激光雷达研究-移动物体检测 接上篇: https://blog.csdn.net/u013224722/article/details/80738619 先pose出效果图,下 ...

  10. 通通玩blend美工(5)——旋转木马,交互性设计

    原文:通通玩blend美工(5)--旋转木马,交互性设计 这一篇偏向于逻辑的比较多,放在这个系列里会不会欠妥呢?在中国交互性设计也是美工的份内职责哦~ 所以没有blend基础的人也可以看懂这篇文章,不 ...