微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python中的Pandas、Matplotlib库详解

文章目录

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小菱形
xX号
<一角朝左的三角形
^一角朝上的三角形

几种常见的图形

命令名图形类型
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堆积柱形图

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐