欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python中的Pandas、Matplotlib库详解

程序员文章站 2024-03-26 13:03:05
...

Pandas数据分析库

1)Pandas是目前Python生态圈最常用的数据分析工具库。该库以Numpy为基础,增加了标签支持,整合了对数据集的读取、清洗、转换、分析、统计、绘图等一系列工作流程,能够高效地处理和分析结构化数据。 Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。Pandas适合处理数值和字符串混杂数据,numpy适合处理统一的数值数据。

2)引入pandas的惯例

import  numpy  as  np
import  pandas  as  pd
from   pandas  import  DataFrame,  Series

Pandas的基本数据结构

1.序列(Series)

Pandas提供了三种基本数据结构

  • Series:带标签的一维数组
  • DataFrame:带标签的二维数组(即表格)
  • Panel:带标签的三维数组(若干表格的叠加面板)

主要使用SeriesDataFrame。与NumPy数组相比,Pandas最重要的改进是增加了标签(也称轴索引),可以实现自动的按索引对齐运算

范例:

import  pandas as pd
from   pandas  import  DataFrame,  Series
pd.__version__   	# 版本号 0.25.1

s1=Series([10,20,30]) 	# 创建Series,默认整数索引0~2
s2=Series([10,20,30], index=['a','b','c']) # 创建并指定索引

s2['a']  	#  按标签访问,10
s2[0]	# 按整数下标访问,10
s2['a':'c']   # 标签切片,3个数据
s2[0:2]  # 按整数索引切片,2个数据

# 求和,均值,中位数
s2.sum(), s2.mean(), s2.median()

s2['a']=100  # 修改'a'标签对应的值
s2['d']=200 # 通过赋值创建新标签

2.标签自动对齐运算

s1 = Series([1, 2, 3], index=list('axb')) 	
s2 = Series({'a':10, 'b':20, 'c':30})	
s1 + s2

Series具有标签,运算时自动对齐标签进行计算,这是Pandas相比NumPy的重要改进。s1的标签为['a','x','b'], s2的标签为['a','b','c'],执行s1 + s2 时,两者都有的’a’、‘b’标签自动对齐,对应的数值相加;两者互不匹配的’c’、'x’标签相加后的值为NaN。NaN(not a number)是Pandas中表示非数值或缺失值的符号。

3.数据框(DataFrame)

DataFrame(数据框)是Pandas最重要的数据结构。数据框可视为由行和列构成的二维表格,每行或每列都可视为一个Series。DataFrame既有行索引(index)又有列索引(columns)。

范例:

data = {'apple': [1100,1050,1200], 'huawei': [1250,1300,1328], 'oppo': [800,850,750]} 
df = DataFrame(data, index=['一月',  '二月',  '三月']) 	# index行标签
df['apple']   		# 访问一列
df.loc['一月']  		# 访问一行,不能写为df['一月']
df.loc['一月', 'apple'] 	# [行标签,列标签] 1100

访问数据

1.数据框有多种灵活的访问形式。

df = DataFrame(np.arange(12).reshape(3,4), index=['a','b','c'], columns=['c1','c2', 'c3','c4'])
df.info()  	# 显示列名及数据类型
df.head(2) 	# 显示头两行
df.tail(2)    	# 显示末尾两行

2.loc[ ]、iloc[ ]访问

1)按列访问
访问列数据时使用object['列名']object.列名的形式。

df['c1'] 	# 访问c1列,也可写为df.c1

2)按列访问

df[ ['c1', 'c3'] ]  		# 访问c1, c3两列,注意多个列名要放入[ ]
df[df.c1 > 3]        	# 按条件访问,只显示c1列>3的行
df[(df.c1 > 3) & (df.c2 > 5)] 	# 按条件访问,c1列>3且c2列>5

Tips:[ ]内的逻辑运算符要使用 &(与)、|(或)、~(非),不能使用Python的and、or、not运算符。[ ]内的逻辑表达式要用小括号括起来,如上例中的(df.c1>3)&(df.c2>5)

3)loc[]基于标签而iloc[]基于整数下标,所以不能出现loc[1]iloc['a']这样的写法。另外,loc['a':'c']将包含结尾的’c’标签,而iloc[0:2]不包含结尾的第2行。

算术运算和对齐

Pandas支持标签访问数据,运算时会自动基于标签对齐进行计算。运算数据若是Series则只有行标签,若是DataFrame则会在行、列两个方向上对齐标签再计算,标签不匹配的数据元素默认标记为NaN值。

范例:

df = pd.DataFrame(np.arange(9).reshape(3, 3), index=list('abc'), 	columns=list('xyz'))
s = pd.Series([1, 2, 3], index=list('xyz'))
df + s

Pandas基于NumPy,所以NumPy的通用函数都可以在Pandas中使用。

数据整理

1.行的插入/删除

# 字典参数, 在末尾插入新行,注意ignore_index=True
df = df.append({'姓名':'d','学号':'A4','成绩1':89,'成绩2':78}, ignore_index=True)

DataFrame的很多命令并不直接改变原数据框,而是返回新数据框,这和列表的处理方式不同。要直接修改原数据框,可将命令写为df=df.append() 的形式。

删除行使用drop()方法。
df.drop(2, inplace=True)     # 按索引删除第2行, inplace= True表示就地修改原数据框

2.列的插入/删除

创建新列最简单的方法是直接给一个新列赋值,新列默认插在最后。要注意提供的数据个数应等于数据框的行数。

df['性别'] = ['M', 'F']      # 增加"性别"列,给新列赋值即可插入列

Matplotlib绘图库

1)概述:数据可视化是指以图形的方式展示数据。

Matplotlib简介

1)图形输出分为嵌入模式和独立窗口模式两种。嵌入模式在IPython的交互窗口中显示图形,图形显示后不能再修改。独立窗口模式在弹出的一个窗口中显示图形,图形可以放大、缩小和修改。

In: %matplotlib  inline         # 设置嵌入模式,左下图
In: %matplotlib             	# 设置独立窗口模式,右下图

2)范例:绘制 y = x^2 曲线

import  numpy  as  np
import  matplotlib.pyplot as plt 		# 导入plt
x = np.linspace(-2, 2, 50)             		# 在区间[-2, 2]内等间距产生50个点
y = x**2                     			# 计算平方值
plt.plot(x,y)

plt.plot(x,y,color='blue',ls='--',label='y=x^2') # 绘曲线并设定蓝色、破折线、图例
plt.xlabel('x', fontsize=14)        		# x轴标记字符x
plt.ylabel('y', fontsize=14)        		# y轴标记字符y
plt.title('Example', fontsize=18)  		# 设置标题
plt.legend()                       			# 显示图例(y=x^2)
plt.show()                # 显示图形(该句可省略)

3)颜色、线型和标记符号

作图时需要指定线条的颜色、线型、标记符号等参数,语句格式如下。

plt.plot( x,  y,  ls='线型', color='颜色', marker='标记', lw=线宽)
linestyle参数表 描述
- 实线
破折线
-. 点划线
: 虚线
‘None’ 空白(不画线)
颜色名称 描述
r 红色
k 黑色
b 蓝色
c 青色
y 黄色
w 白色
g 绿色
标记 描述
o 圆圈
.
D 菱形
+ 加号
v 一角朝下的三角形
> 一角朝右的三角形
None 空白
s 正方形
* 星号
d 小菱形
x X号
< 一角朝左的三角形
^ 一角朝上的三角形

几种常见的图形

命令名 图形类型
plt.plot() 折线图
plt.pie() 饼图
plt.hist() 直方图
plt.boxplot() 箱线图
plt.bar() 柱形图
plt.barh 水平条形图
plt.scatter() 散点图

多图绘制

1)可以在一张图上同时显示多个子图形以便进行比较研究。绘制多子图可借助 figure 画布对象,这个对象用于创建子图。

范例:

x = np.arange(1,100)
fig = plt.figure()            		# 创建一个figure对象
ax1 = fig.add_subplot(2,2,1)    	# 2行x 2列图形的第一个子图
ax1.plot(x, x)
ax2 = fig.add_subplot(2,2,2)    	# 2行x 2列图形的第二个子图
ax2.plot(x, -x)
ax3 = fig.add_subplot(2, 2, 3)  	# 2行x 2列图形的第三个子图
ax3.plot(x, x**2)
ax4 = fig.add_subplot(2, 2, 4)  	# 2行x 2列图形的第四个子图
ax4.plot(x, np.log(x))

使用Pandas绘图

1)df.plot(kind='bar', rot=0)语句指定做一个柱形图。pandas自动以每行为一组数据,每组数据中含3个列数据, 结果绘制出4组柱形对比图。列索引名"ABC"成为图例,行索引"一二三四"成为X轴上的标记。rot=0指定标记文字旋转角度为0,如不设定旋转角度值,文字默认会旋转90度。

2)kind='类型'参数用于指定作图的类型,常用的类型有line(折线图)、bar(柱形图)、barh(水平条形图)、pie(饼图)、kde(密度图)、hist(直方图)等。如不指定类型则默认为折线图。

范例:

df.A.plot(kind='pie', title='A列数据', fontsize=16) # 以A列数据做饼图
df.plot(kind='bar', stacked=True, rot=20)   # stacked=True堆积柱形图