在学这数据结构这部分内容的时候,我已经深刻体会到Python语法知识的重要性。在后来尝试用Python完成数据分析过程的时候,才更深深体会到啥叫一环扣一口,因为这些枯燥的数据结构的知识是接下来分析实操的基础。
以下分为四部分展开:
Numpy一维数据结构Array
Pandas一维数据结构:Series
Numpy二维数据结构:Array
Pandas二维数据结构: DataFrame
Numpy(numerical Python)一维数据结构:Array(数组)
![e1fda05c459e9525984cfb3e778ec7ab.png](https://i-blog.csdnimg.cn/blog_migrate/8941d8170428a3e54a99ee1fba94c773.png)
1)定义一维Numpy数组
2)查询第一个元素
3)切片访问 访问第2、3、4个元素
4)用for循环访问数组中的全部元素
5)用dtype来查询数据类型
import numpy as np
a=np.array([2,3,4,5])
print(a[0])
print(a[1:3])
print(a.dtype)
for i in a:
print(i,end=" ")
![23cd0a44c29c45547c425c8150839fc5.png](https://i-blog.csdnimg.cn/blog_migrate/e17f4707e0d38ab1b21f425f38fd0258.png)
Numpy一维数组和列别的区别
1)一维数组具有统计功能
平均值mean()
标准差srd()
2)一维数组可进行向量化计算
向量相加
乘以标量
![d0a8ad69390e69222147df450a862add.png](https://i-blog.csdnimg.cn/blog_migrate/ebe739489bfcd3a0d60e85a105eac59b.jpeg)
3)Numpy数组中的元素必须是同一种数据类型,而列表中的元素可以是不同的数据类型
Pandas的一维数据结构:Series
![c1aa47e24794127ba9cf777c779f9933.png](https://i-blog.csdnimg.cn/blog_migrate/6e84b02bbd97c5cbee26726546692258.png)
1)定义一维数组
age=pd.Series([20,21,23,25,27,28,30],
index=['a','b','c','d','e','f','g'])
2)获取描述统计信息
print(age.describe())
输出结果:
![8546642d32fb04a96c1f19746c016790.png](https://i-blog.csdnimg.cn/blog_migrate/8fa94dccdc4239a1a7bf6b58dea6f6f4.png)
3)获取一维数组中的元素
age=pd.Series([20,21,23,25,27,28,30],
index=['a','b','c','d','e','f','g'])
print(age.iloc[0])
print(age.loc['g'])
![ebf3dcb48f91b16ad37bcc939dc69a44.png](https://i-blog.csdnimg.cn/blog_migrate/6e9b1c9e159562fcf92637f6840c9fed.png)
4)一维数组 向量相加
s1=pd.Series([4,5,6.5,8,12], index=['a','b','c','d','e'])
s2=pd.Series([1,2,3,4,5], index=['a','b','c','f','g'])
s3=s1+s2
print(s3)
![190eb5064807b8d5546b0fee8d58a7f5.png](https://i-blog.csdnimg.cn/blog_migrate/e391467a9ead21df34b3a626553c7508.png)
对于s1+s2相加后有空值,处理方法有两种:
1)删除缺失值 s3.dropna()
![f62b53d248eef4ae973a6ab2e81a149a.png](https://i-blog.csdnimg.cn/blog_migrate/5db78a8283d804e7796d78ed37d17480.png)
2)将缺失值进行填充 s3=s1.add(s2, fill_value=0)
![75871a942a2f1cf5b93f377a9a7cb1ae.png](https://i-blog.csdnimg.cn/blog_migrate/877f6e11bc676994dbadfb69d90ea710.png)
Numpy二维数据结构:Array
二维数据分析(有行也有列)
![829ce28ba2d96b2d8b7f069950ba49d0.png](https://i-blog.csdnimg.cn/blog_migrate/21ad63f7768bbcc349a5e3451df01edf.png)
1)定义二维数组
import numpy as np
a=np.array([
[1,2,3,4],
[5,6,7,8],
[9,10,11,12]
])
2)查询
查询数组种的某个元素
a[0,2] a[行的序号,列的序号]
获取某一行的元素 a[行的序号,:]
获取某一列的元素 a[:,列的序号]
![4c544370913468dabba148d39e24da5d.png](https://i-blog.csdnimg.cn/blog_migrate/bb4f68f58739939cb5a83c7eb423655d.png)
3)Numpy数轴参数
数轴参数的名称 asix, 通过指定asix的值来指定按照某一行或者某一列来进行计算
Axis=1 按行计算平均值/标准差等等
Axis=0 按列计算平均值/标准差等等
![ae6987801d0256296206a8a61c70c7fc.png](https://i-blog.csdnimg.cn/blog_migrate/e8142a1ab9b5a1bedf9eb6b4f0490a5d.png)
Pandas二维数据结构: DataFrame
![89cd7dde6badc02c4914b810d75fbac0.png](https://i-blog.csdnimg.cn/blog_migrate/238578f6d88148c3e9a240592b97e006.jpeg)
定义字典,并将这些数据转换成DataFrame
![702bf8496daed691e1ef1750ac8cf5c1.png](https://i-blog.csdnimg.cn/blog_migrate/768f539799aab9721fc8f3f228f8c427.jpeg)
1)输出有序的数据框
注意:因为字典是无序的数据结构,所以最终的输出结果与输入顺序不一致
(可以用OrderDict将无序变成有序)
![c6729598c56318d229a21bd4ff04ffed.png](https://i-blog.csdnimg.cn/blog_migrate/440125d8c566422fcd846b791ce19a00.png)
from collections import OrderedDict
salesOrderedDict=OrderedDict(salesDict)
salesDf=pd.DataFrame(salesOrderedDict)
print(salesDf)
![5687bb25768193369ddbc1e87a3156e5.png](https://i-blog.csdnimg.cn/blog_migrate/d86d3b50d139cd779b7ede1c8cf01527.jpeg)
2)对定义好的数据框取平均值
(是按照每一列来取数据值)
print(salesDf.mean())
![9e14fcd1d83e53cebb42b9bb10f8f168.png](https://i-blog.csdnimg.cn/blog_migrate/35d6037f44642dc4af7c0acd610d374e.png)
3)查询
iloc属性用于根据位置查询值
1.查询元素
2.获取第一行
3.获取第一列
print(salesDf.iloc[1,1])
print(salesDf.iloc[0,:])
print(salesDf.iloc[:,0])
loc属性用于根据索引(行名和列名)查询值
1.查询元素
2.获取第一行
3.获取第一列
print(salesDf.loc[0,'社保卡号'])
print(salesDf.loc[0,:])
print(salesDf.loc[:,'商品名称'])
1.查询某几列 print(salesDf[['社保卡号','销售数量']])
2.切片功能:指定范围 (例如查询社保卡号到销售数量的列)
4)通过条件判断筛选
1构建查询条件
querySer=salesDf.loc[:,'销售数量']>1
print(querySer)
![81f6bc37b163e636f32e8c397fd862d1.png](https://i-blog.csdnimg.cn/blog_migrate/801a1f07f9dad0ee112303c97e85bb2f.png)
应用查询条件 (只把符合条件的行显示出来)
querySer=salesDf.loc[:,'销售数量']>1
salesDf.loc[querySer,:]
![b698f5382eb8da97726c718948ca016e.png](https://i-blog.csdnimg.cn/blog_migrate/b9d5a4afbc7b25ce341be9a174c62361.png)
其他操作:
1)读取Excel数据
import pandas as pd
fileNameStr=r'C:UsersTTXDesktop跟猴子学习人工智能核心技术数据分析(高级)(Python)第3关:数据分析的基本过程朝阳医院2018年销售数据.xlsx'
xl=pd.ExcelFile(fileNameStr)
salesDf=xl.parse('Sheet1')
print(salesDf)
2)打印前5行 salesDf.head(5)
salesDf.head(5)
3)查看列的数据类型 dtype
salesDf.loc[:,'销售数量'].dtype
输出结果:float64
4)有多少行,多少列 shape
salesDf.shape
输出结果:
![4d1f39b4f5f2bcdb200f8c0dd84310ac.png](https://i-blog.csdnimg.cn/blog_migrate/5ba02dfbfd15762bbcc039298a0c86ac.png)
5)每一列的描述统计信息 用describe
salesDf.describe()
![2405ea41f07113165d8c621d7cba4b44.png](https://i-blog.csdnimg.cn/blog_migrate/2cefff1b1e8dc416a46b7dfb81594cd9.png)