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

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 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,保存的数据将会比较乱



目录
相关文章
|
14天前
|
XML JSON 数据库
Python的标准库
Python的标准库
131 77
|
29天前
|
机器学习/深度学习 算法 数据挖掘
数据分析的 10 个最佳 Python 库
数据分析的 10 个最佳 Python 库
83 4
数据分析的 10 个最佳 Python 库
|
15天前
|
XML JSON 数据库
Python的标准库
Python的标准库
42 11
|
28天前
|
人工智能 API 开发工具
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
吴恩达发布的开源Python库aisuite,提供了一个统一的接口来调用多个大型语言模型(LLM)服务。支持包括OpenAI、Anthropic、Azure等在内的11个模型平台,简化了多模型管理和测试的工作,促进了人工智能技术的应用和发展。
107 1
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
|
15天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
57 8
|
23天前
|
安全 API 文件存储
Yagmail邮件发送库:如何用Python实现自动化邮件营销?
本文详细介绍了如何使用Yagmail库实现自动化邮件营销。Yagmail是一个简洁强大的Python库,能简化邮件发送流程,支持文本、HTML邮件及附件发送,适用于数字营销场景。文章涵盖了Yagmail的基本使用、高级功能、案例分析及最佳实践,帮助读者轻松上手。
31 4
|
1月前
|
测试技术 Python
Python中的异步编程与`asyncio`库
Python中的异步编程与`asyncio`库
|
4月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
93 2
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
232 4
|
4月前
|
机器学习/深度学习 算法 数据挖掘
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
本文介绍了2023年第二届钉钉杯大学生大数据挑战赛初赛A题的Python代码分析,涉及智能手机用户监测数据分析中的聚类分析和APP使用情况的分类与回归问题。
103 0
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析