【Python学习】一文总结:数据分析库pandas基础

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
大数据开发治理平台 DataWorks,不限时长
简介: pandas是一款优秀的用于数据分析/挖掘的第三方库,在数据分析场景中非常常用,本文基于《Python 数据分析库 Pandas 快速入门》视频,对pandas的基础用法进行了总结。

本文目录

1. pandas是什么

  1. panel(面板)+data(数据)+analysis(分析)
  2. 2008年WesMcKinney开发的专门用于数据分析/挖掘的开源第三方python库;
  3. 它以Numpy为基础,具备Numpy模块在计算方面的高性能优势,并封装了matplotlib库的图表绘制功能;
  4. 它有自己独特的数据结构DataFrame,可以实现丰富的数据处理功能。


2. pandas的优势

  1. 高效便捷的数据处理能力;
  2. 简便易用的文件读取能力;
  3. 封装了Numpy和Matplotlib的计算和绘图能力。


3. pandas的核心数据结构DataFrame

3.1 DataFrame结构

  • DataFrame是一个类似二维表格的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值等);
  • DataFrame既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)
  • 行索引,表明不同行,横向索引,叫‘index
  • 列索引,表名不同列,纵向索引,叫‘columns

3.1.1 DataFrame的创建语法

#导入第三方库importnumpyasnpimportpandasaspd#先用numpy按正态分布随机生成一份值在0到1之间的2行3列的数据data=np.random.normal(0,1,(2,3))
#将上面生成的数据构造为DataFrame结构df=pandas.DataFrame( data, index, columns, dtype, copy)
/*参数说明:data:一组数据(ndarray/series/map/lists/dict等类型)index:行索引,或称行标签,默认为RangeIndex (0,1,2,,n)columns:列索引,或称标签,默认为RangeIndex (0,1,2,,n)dtype:数据类型。copy:拷贝数据,默认为False。*/

3.1.2 DataFrame的常用属性

df.shape#dataframe的行数和列数,结果为一个元组(行数,列数)df.index#dataframe的行索引列表df.columns#dataframe的列索引列表df.values#dataframe的数据值,结果为一个数组arraydf.T#行列转置

3.1.3 DataFrame的常用方法

df.head(n) #前n行,默认前5行,常用于预览数据df.tail(n) #后n行,默认后5行

3.1.4 DataFrame索引的设置

#修改行列索引值,不能单独修改,须整列索引一起修改df.index=new_index#重置行索引,drop默认为False,会删掉旧索引df=df.reset_index(drop=True)
#设置新索引,key为新索引名的列表,可指定某列或某几列作为新索引,drop默认为False,会删掉旧索引new_df=df.set_index(key,drop=True)

将单列的值设置为行索引时,行索引是Index;将多列的设置为行索引时,行索引是MultiIndex,可以用来表示三维数据。

3.2 MultiIndex与Panel

MultiIndex是多级或分层索引对象,可存储多维数据。

#MultiIndex的index属性new_df.index.names#每级或每层的名称new_df.index.levels#每级或每层的元组值

Panel是存储三维数据的容器。panel是dataframe的容器。

#Panel的创建p=pd.Panel(np.arange(24),reshape(4,3,2),items='abcd',major_axis=pd.date.range('20200101',periods=3),minor_axis=['first','second'])
/*参数说明:items:axis=0,每个panel对应于内部包含的数据帧(dataframe)major_axis:axis=1,每个数据帧(dataframe)的行索引minor_axis:axis=2,每个数据帧(dataframe)的列索引*//*三维数据无法直接展示,打印出来只能看到描述信息,但可以查看某一维度下的dataframe*/p['a'] #查看items=a的dataframep.major_xs('20200101') #查看major_axis='20200101'的dataframep.minor_xs('first') #查看minor_axis='first'的dataframe

注:pandas从0.20.0版本开始弃用panel,转而推荐使用DataFrame上的MultiIndex方法来表示3D数据。

3.3 Series

Series是带索引(index)的一维数组,dataframe是series的容器。

3.3.1 创建Series

#1、通过已有数据创建sr1=pd.Series(np.arange(10)) #指定内容,默认索引(从0开始的整数序列)sr2=pd.Series(np.arange(5),index=[1,2,3,4,5]) #指定内容和索引#2、通过字典数据创建sr3=pd.Series({'red':100,'bule':50,'green':20,'yellow':10})

3.3.2 获取Series的索引和值

#获取Series sr1 的索引sr1.index#获取Seriex sr1 的值sr1.values

4. pandas的基本数据操作

数据准备

#从csv文件中读取数据data=pd.read_csv('./stock_day/stock_day.csv') #"."表示当前目录开始,".."表示从父目录开始#删除一些列data=data.drop('ma5','ma10','ma20','v_ma5',axis=1) #axis=1表示列,axis=0表示行

4.1 索引操作

Numpy 中支持使用索引选取序列和切片选择,pandas也支持类似的操作,也可以直接使用列名、行名称,甚至组合使用。

#1、直接使用行列索引(先列后行)print(data['列名']['行名(数)']) #若行列顺序搞反会报错#2、按名字索引(loc,行列不分顺序)print(data.loc['列名']['行名(数)'])
print(data.loc['列名','行名(数)'])
print(data.loc['行名(数)','列名'])
#3、按数字索引(iloc,先行后列)print(data.iloc[1,0]) #第二行第一列的值#4、组合索引(名字索引和数字索引混用,即将过时)print(data.ix[:4,['列名1','列名2']])#获取列1列2前4行的数据#用loc实现print(data.loc[data.index[0:4],['列名1','列名2']]
#用iloc实现print(data.iloc[0:4,data.columns.get_indexer(['列名1','列名2'])])

4.2 赋值与排序

赋值操作

#对DataFrame中的某列进行整列重新赋值为1data['列名']=1#或者data.列名=1#修改第2行第1列单元格的值为1data.iloc[1,0]=1

排序操作

(1)对内容进行排序

1.1)DataFrame,使用df.sort_values(by=,ascending=)对内容进行排序,单个键或者多个键进行排序,默认升序。by=列名或多个列名的列表;ascending=False:降序,ascending=True:升序。

#将dataframe数据按某列的值的降序排列df=df.sort_values(by='列名',ascending=False)
#将dataframe数据按多列的值的升序排列df=df.sort_values(by=['列名1','列名2'])

1.2)Series使用sr.sort_values(ascending=True)对内容进行排序,因为series只有一列,所以排序时不需要指定列名参数。ascending=False:降序,ascending=True:升序,默认升序。

#将series数据按降序排列sr=sr.sort_values(ascending=False)

(2)对索引进行排序
按索引进行排序时,DataFrame和Series的排序方法一致。都是使用.sort_index(ascending=)来进行排序,ascending=False:降序,ascending=True:升序,默认升序。

#将dataframe或series数据按索引降序排序df['列名'].sort_index(ascending=False)

4.3 数据运算

Series和DataFrame数据的运算方法类似。

4.3.1 算术运算

算术运算符主要是+、-、*、/等,对应的函数为add(数值)、sub(数值)、mul(数值)、div(数值)。

ps:使用函数时可以与head()函数一起使用。

##将整个dataframe或series数据df加上10df+10#或者df.add(10)
##将某列的值加10df['列名'].add(10)
##列1-列2df['列1']-df['列2']
#或者df['列1'].sub(df['列2'])

4.3.2 逻辑运算

逻辑运算符有<、>、|、&等。

逻辑运算函数有query()、isin()等。

逻辑运算的结果为布尔值,即True或False。

##单条件筛选:筛选列1的值大于2的全表数据df[df['列1']>2]
#或者df.query("列1 >2")
##多条件筛选:筛选列1的值大于2且列2的值为“中国”的全表数据df[(df['列1']>2) & (df['列2']=='中国')]#需加(),否则可能会报错#或者df.query("列1 > 2 & 列2 == '中国' ")
#isin()函数:判断是否包含某些值,筛选列1的值为中、美、俄的全表数据df[df['列1'].isin(['中','美','俄'])]

4.4 统计运算与自定义运算

4.4.1 统计运算

1)综合统计函数

describe()函数:可以一次性计算出count(计数)、mean(平均值)、std(标准差)、min(最小值)、25%(四分位数)、50%(中位数)、75%(四分之三分位数)、max(最大值)。

2)数值统计函数

max():最大值

min():最小值

median():中位数

std():标准差

var():方差

……

以上函数均默认(axis=0),即按列“columns”统计 ,如果要按行“index"进行统计,需要指定(axis=1)。

3)统计索引函数

idxmax():最大值对应的索引

idxmin():最小值对应的索引

4)累计统计函数

cumsum():从首行到当前行的累计求和,即:1+2+……+n

cummax():从首行到当前行的累计最大值,即:max(1,2,……,n)

cummin():从首行到当前行的累计最小值,即:min(1,2,……,n)

cumprod():从首行到当前行的累计乘积,即:1*2*……*n

#对df表进行综合统计df.describe()
#对列1进行求和df['列1'].sum()
#获取列1最大值对应的索引df['列1'].idxmax()
#对列1进行累计求和df['列1'].cumsum()
#对列1按索引排序后再进行累计求和df['列1'].sort_index().cumsum()

4.4.2 自定义运算

自定义函数:apply(func),func:自定义函数体,默认按列计算,即axis=0,若要按行计算,需指定axis=1。

#定义一个对列做最大值-最小值计算的函数df.apply(lambdax:x.max()-x.min())

5. pandas绘图

绘图函数:

pandas.DataFrame.plot(x=None,y=None,kind='line')

(x:x轴;y:y值;kind:图表类型,line--折线图(默认),bar--垂直条形图,barh--水平条形图,hist--直方图,pie--饼图,scatter--散点图

#绘制列1和列2的散点图df.plot(x='列1',y='列2',kind='scatter')

6. pandas的文件读取与存储

image.png

数据的存储格式多种多样,pandas支持读取和存储的文件格式非常丰富,如 CSV、SQL、XLS、XLSX、JSON、HDF5等,其中最常用的有HDF5/CSV/JSON。

6.1 CSV

6.1.1 读取csv文件

pandas.read_csv(filepath_or_buffer,sep=',',usecols=None,names=None),filepath_or_buffer:文件路径,sep:指定分隔符,默认为英文逗号,usecols:指定列名,列表形式,names:指定字段名称,当csv无列名或需要重命名列名时使用,字段数需与csv列数和顺序均一致。

#读取csv文件df=pandas.read_csv('',usecols=['a','m','de'])

6.1.2 存储为csv文件

df.to_csv (path_or_buf=None, sep=', ', columns=None, header=True, index=True, mode='w', encoding=None),path_or_buf:文件名;sep:指定分隔符,默认为英文逗号;columns:指定列索引,列表形式;header:是否写入列索引,默认True写入,若不需要写入则指定为False;index:是否写入行索引,默认True写入,若不需要写入则指定为False;mode:模式,'w'--覆盖写,'a'--追加写;encoding:指定编码格式。

#覆盖写模式存储csv文件df.to_csv('D:\test\test.csv',mode='w')

6.2 HDF5

6.2.1 读取hdf5文件

HDF5是一种二进制文件,读取和存储时需要指定一个键,值为要存储的dataframe,因此可以理解为HDF5可以存储三维数据。

pandas.read_hdf(path_or_buf,key=,mode=''),path_or_buf:文件的路径;key:读取的键。

#读取HDF5文件,只有1个键时,可以不用指定读取的键。有多个键时,需要指定,否则会报错。df.read_hdf('d:\test\test.h5')
'''如果读取的时候出现错误:ImportErrorv RDFStore requires PyTables。“No module named ‘tables’ " problem importing是因为没有装“tables”这个库,这个库就是用来支持读取 HDF5 文件的。'''

6.2.2 存储为hdf5文件

df.to_hdf(path, key = ),path:文件名和路径,key:保存的键,必填。

#存储为HDF5文件df.to_hdf('d:\test\test.h5',key='a')#不加key会报错

6.3 JSON

json是前后端交互时常用的数据格式,也会用于存储。pandas也支持对该数据格式的读取和存储。

6.3.1 读取json文件

pandas.read_json(path_or_buf=None,orient='records',type='frame',lines=Fales),orient:告诉API以怎样的格式展示读取的 json文件;type:指定转换成的数据类型frame或series,默认'frame';lines:是否按行读取,默认False。

#读取json文件pandas.read_json('d:\test\test.json',orient='records',lines=True)

6.3.2 存储为json文件

df.to_json(path),需要用到的参数(与读取相同):orient = 'records',lines = True/False。

#将df存储为json格式df.to_json('d:\test\test.json',orient='records',lines=True)#若lines默认False,保存的数据将会比较乱



目录
相关文章
|
4天前
|
机器学习/深度学习 数据采集 数据挖掘
如何用Python进行数据分析?
【6月更文挑战第13天】如何用Python进行数据分析?
101 66
|
1天前
|
数据采集 数据可视化 数据挖掘
数据挖掘实战:使用Python进行数据分析与可视化
在大数据时代,Python因其强大库支持和易学性成为数据挖掘的首选语言。本文通过一个电商销售数据案例,演示如何使用Python进行数据预处理(如处理缺失值)、分析(如销售额时间趋势)和可视化(如商品类别销售条形图),揭示数据背后的模式。安装`pandas`, `numpy`, `matplotlib`, `seaborn`后,可以按照提供的代码步骤,从读取CSV到数据探索,体验Python在数据分析中的威力。这只是数据科学的入门,更多高级技术等待发掘。【6月更文挑战第14天】
25 11
GitHub爆赞!终于有大佬把《Python学习手册》学习笔记分享出来了
这份笔记的目标是为了给出一份比较精炼,但是又要浅显易懂的Python教程。《Python学习手册》中文第四版虽然比较简单,但是措辞比较罗嗦,而且一个语法点往往散落在多个章节,不方便读者总结。 我在做笔记时,将一个知识点的内容都统筹在一个章节里面,因此提炼性大大提高。而且还有《Python学习手册》中文第四版的翻译在某些章节(可能难度较大?)措辞可能前后矛盾。当知识点提炼之后就能够很快的找到一些难以理解的概念的上下文,方便吃透这些难点。
|
2天前
|
数据采集 机器学习/深度学习 数据可视化
数据挖掘实战:Python在金融数据分析中的应用案例
Python在金融数据分析中扮演关键角色,用于预测市场趋势和风险管理。本文通过案例展示了使用Python库(如pandas、numpy、matplotlib等)进行数据获取、清洗、分析和建立预测模型,例如计算苹果公司(AAPL)股票的简单移动平均线,以展示基本流程。此示例为更复杂的金融建模奠定了基础。【6月更文挑战第13天】
15 3
|
2天前
|
Python
在Python的pandas库中,向DataFrame添加新列简单易行
【6月更文挑战第15天】在Python的pandas库中,向DataFrame添加新列简单易行。可通过直接赋值、使用Series或apply方法实现。例如,直接赋值可将列表或Series对象分配给新列;使用Series可基于现有列计算生成新列;apply方法则允许应用自定义函数到每一行或列来创建新列。
27 8
|
5天前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
【6月更文挑战第12天】在数字时代,Python因其强大的数据处理能力和易用性成为数据分析首选工具。结合Pandas(用于高效数据处理)和Matplotlib(用于数据可视化),能助你成为数据分析专家。Python处理数据预处理、分析和可视化,Pandas的DataFrame简化表格数据操作,Matplotlib则提供丰富图表展示数据。掌握这三个库,数据分析之路将更加畅通无阻。
|
6天前
|
JSON 数据挖掘 API
数据分析实战丨基于pygal与requests分析GitHub最受欢迎的Python库
数据分析实战丨基于pygal与requests分析GitHub最受欢迎的Python库
17 2
|
7天前
|
数据采集 数据可视化 数据挖掘
如何快速上手 Python,成为一名数据分析师
【6月更文挑战第10天】学习Python是成为数据分析师的关键。首先,掌握基本语法和数据结构,如变量、控制结构及列表、字典等。然后,学习NumPy、Pandas和Matplotlib库:NumPy用于数组计算,Pandas处理和分析数据,Matplotlib进行数据可视化。不断实践项目,从简单分析任务做起,并保持学习新技能的热情,关注技术动态。通过系统学习和实践,可迅速踏上数据分析师之路。
|
7天前
|
SQL 缓存 算法
【源码解析】Pandas PandasObject类详解的学习与实践
【源码解析】Pandas PandasObject类详解的学习与实践
|
7天前
|
存储 数据挖掘 数据处理
【python源码解析】深入 Pandas BlockManager 的数据结构和初始化过程
【python源码解析】深入 Pandas BlockManager 的数据结构和初始化过程

热门文章

最新文章