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

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



目录
相关文章
|
3天前
|
数据采集 数据挖掘 数据处理
使用Python和Pandas进行数据分析基础
使用Python和Pandas进行数据分析基础
21 5
|
5天前
|
数据可视化 数据挖掘 数据处理
Python中数据可视化的魔法——使用Matplotlib和Pandas
【9月更文挑战第5天】在Python的世界里,数据可视化是连接复杂数据与人类直觉的桥梁。本篇文章将带领读者探索如何使用Matplotlib和Pandas这两个强大的库来揭示数据背后的故事。我们将从基础概念开始,逐步深入到高级技巧,让每一位读者都能轻松创建引人入胜的数据可视化图表,使数据分析变得既直观又有趣。
43 14
|
2天前
|
数据采集 数据挖掘 数据处理
使用Python和Pandas处理CSV数据
使用Python和Pandas处理CSV数据
16 5
|
10天前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
【9月更文挑战第2天】数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
37 5
|
13天前
|
机器学习/深度学习 存储 数据可视化
Python 中的 Pandas
【8月更文挑战第29天】
56 9
|
13天前
|
SQL JSON 数据可视化
Pandas库常用方法、函数集合
Pandas库常用方法、函数集合
|
14天前
|
索引 Python
python pandas 把数据保存成csv文件,以及读取csv文件获取指定行、指定列数据
该文档详细介绍了如何使用Python的Pandas库处理图像数据集,并将其保存为CSV文件。示例数据集位于`test_data`目录中,包含5张PNG图片,每张图片名中的数字代表其标签。文档提供了将这些数据转换为CSV格式的具体步骤,包括不同格式的数据输入方法(如NumPy数组、嵌套列表、嵌套元组和字典),以及如何使用`pd.DataFrame`和`to_csv`方法保存数据。此外,还展示了如何读取CSV文件并访问其中的每一行和每一列数据,包括获取列名、指定列数据及行数据的操作方法。
26 1
|
19天前
|
程序员 测试技术 开发工具
豆瓣评分7.9!世界级讲师耗时5年整理出的Python学习手册!
Python是一门流行的开源编程语言,广泛用于各个领域的独立程序与脚本化应用中。它不仅免费、可移植、功能强大,同时相对简单,而且使用起来充满乐趣。从软件业界的任意一角到来的程序员,都会发现Python着眼于开发者的生产效率以及软件质量,因此无论你的项目是大还是小,选择Python都将带来战略性的优势。 今天给小伙伴们分享的这份手册讲述了完整的Python语言,力争满足“语言”和“原理”两个方面的需求,并拥有足够的深度以便实用。废话不多说,下面展示给大家。
|
14天前
|
算法 数据挖掘 Java
日常工作中,Python+Pandas是否能代替Excel+VBA?
日常工作中,Python+Pandas是否能代替Excel+VBA?
|
14天前
|
存储 JSON 测试技术
Python中最值得学习的第三方JSON库
Python中最值得学习的第三方JSON库