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)

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=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‘])
时间: 2025-01-16 23:49:49

python之数据分析pandas的相关文章

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

利用Python进行数据分析--pandas入门 基于NumPy建立的 from pandas importSeries,DataFrame,import pandas as pd 一.两种数据结构 1.Series 类似于Python的字典,有索引和值 创建Series #不指定索引,默认创建0-N In [54]: obj = Series([1,2,3,4,5]) In [55]: obj Out[55]: 0 1 1 2 2 3 3 4 4 5 dtype: int64 #指定索引 In

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

对数据集进行分组并对各组应用一个函数(无论是聚合还是转换),通常是数据分析工作中的重要环节.在将数据集加载.融合.准备好之后,通常是计算分组统计或生成透视表.pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片.切块.摘要等操作. 关系型数据库和SQL能够如此流行的原因之一就是能够方便地对数据进行连接.过滤.转换和聚合.但是,像SQL这样的查询语言所能执行的分组运算的种类很有限.在本部分你将会看到,由Python和pandas强大的表达能力,我们可以执行复

利用python进行数据分析——pandas与索引

1. pandas包括series.dataframe Series Series是一维的数组型对象. Series包含了索引index和值value.比如说: DataFrame DataFrame是矩阵的数组表. DataFrame既有行索引也有列索引,它可以被视为一个共享相同索引的Series的dict.比如说: 2. pandas的索引? 2.1 普通索引.切片索引 在这个对象中,索引可以表达为: 注意1:通过索引获取数据,如果获取一个值,不显示索引:如果获取多个值,显示索引. 注意2:

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

在许多应用中,数据可能分散在许多文件或数据库中,存储的形式也不利于分析.本部分关注可以聚合.合并.重塑数据的方法. 1.层次化索引 层次化索引(hierarchical indexing)是pandas的一项重要功能,它使你能在一个轴上拥有多个(两个以上)索引级别.抽象点说,它使你能以低纬度形式处理高纬度数据.我们来看一个简单的栗子:创建一个Series,并用一个由列表或数组组成的列表作为索引: data = pd.Series(np.random.randn(9), index=[['a',

利用 Python 进行数据分析(九)pandas 汇总统计和计算

pandas 对象拥有一些常用的数学和统计方法.   例如,sum() 方法,进行列小计: sum() 方法传入 axis=1 指定为横向汇总,即行小计: idxmax() 获取最大值对应的索引: 还有一种汇总是累计型的,cumsum(),比较它和 sum() 的区别: unique() 方法用于返回数据里的唯一值: value_counts() 方法用于统计各值出现的频率: isin() 方法用于判断成员资格: 安装步骤已经在首篇随笔里写过了,这里不在赘述.利用 Python 进行数据分析(一

利用 Python 进行数据分析(八)pandas 基本操作(Series 和 DataFrame)

一.reindex() 方法:重新索引 针对 Series   重新索引指的是根据index参数重新进行排序. 如果传入的索引值在数据里不存在,则不会报错,而是添加缺失值的新行. 不想用缺失值,可以用 fill_value 参数指定填充值. 例如: fill_value 会让所有的缺失值都填充为同一个值,如果不想这样而是用相邻的元素(左或者右)的值填充,则可以用 method 参数,可选的参数值为 ffill 和 bfill,分别为用前值填充和用后值填充: 针对 DataFrame   重新索引

利用 Python 进行数据分析(七)- pandas 简单介绍(Series和DataFrame)

一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构:Series 和 DataFrame. 二.Series Series 是一个一维数组对象 ,类似于 NumPy 的一维 array.它除了包含一组数据还包含一组索引,所以可以把它理解为一组带索引的数组. 将 Python 数组转换成 Series 对象: 将 Python 字典转换成 Serie

利用 Python 进行数据分析(十二)pandas:数据合并

pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法combine_first()方法:合并重叠数据. pandas.merge()方法:数据库风格的合并 例如,通过merge()方法将两个DataFrame合并: on='name'的意思是将name列当作键: 默认情况下,merge做的是内连接(inner),即键的交集. 其他方式还有左连接(lef

Python数据分析--Pandas知识点(二)

本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) 下面将是在知识点一的基础上继续总结. 13. 简单计算 新建一个数据表df 1 import pandas as pd 2 3 df = pd.DataFrame({"地区": ["A区","B区", "C区"], 4 "前半年销量": [3500, 4500,3800], 5