认识pandas模块
Numpy小测验
1.计算数组每一行和每一列的中位数(不能使用axis参数)
array([
[ 80.5, 60., 40.1, 20., 90.7],
[ 10.5, 30., 50.4, 70.3, 90.],
[ 35.2, 35., 39.8, 39., 31.],
[91.2, 83.4, 85.6, 67.8, 99.]
])
解题:
# 每一行中位数 for i in res: print('每一行>>>:',i) print('中位数>>>:',np.median(i)) # 每一列中位数 for i in range(res.shape[1]): print('每一列>>>:',res[:,i]) print('中位数>>>:',np.median(res[:,i]))

2.jason有10000块钱,去某赌场嗨皮,假设输赢概率都是50%,并且赢一场赚100,输一场亏100
jason总共玩了1500场,写程序计算1500场之后jason还剩多少钱
解题:
"""统计jason每一次赌完后账户总额""" # 先定义一个变量存储jason的本金 money = 10000 # 再定义一个存储每次赌局之后账户金额的变量 package = [] # 先将jason初始的本金添加进来 package.append(money) # 利用for循环模拟1500次赌局 for i in range(1500): # 先判断输赢 is_right = np.random.choice([1,0]) # 1表示赢 0表示输 # 判断赢则账户加100 if is_right: money += 100 # 判断输则账户减100 else: money -= 100 # 每次循环结束之后都将结构添加到列表中 package.append(money) # 循环结束即1500场完成 # print(money) # print('记录',package) # 可视化作图(后期会讲) import matplotlib.pyplot as plt plt.plot(range(1501),package) # x轴与y轴坐标数据 plt.show()
pandas模块介绍
1.基于Numpy构建
pandas的出现,让python语言成为使用最广泛而且强大的数据分析语言
pandas针对表格文件的操作有非常大的优势(尤其是数据量超过10万行的)
2.pandas的主要功能
- 具备诸多功能的两大数据结构
Series、DataFrame都是基于Numpy构建出来的
公司中使用频繁的是DataFrame,而Series是构成DataFrame的基础,即一个DataFrame可能由N个Series构成
- 集成时间序列功能
- 提供丰富的数学运算和操作(基于Numpy)
- 灵活处理缺失数据
3.模块下载
* python纯开发环境下
pip3 install pandas
* anaconda环境下
conda install pandas
但是anaconda其实内部已经帮我们自动下好数据分析相关的模块,不需要我们手动下载
4.导入模块
import pandas import pandas as pd # 更加习惯给它起一个别名pd
补充:数据分析三剑客模块由于使用频率非常地高,所以很多ipynb文件在开头都会提前导入
eg:
import numpy as np
import pandas as pd
数据类型之Series
是一种类似于一维数组对象,有数据和相关的标签(索引)组成
eg:
pd.Series([4,5,6,7,8]) pd.Series([4,5,6,7,8],index=['a','b','c','d','e']) pd.Series({"a":1,"b":2}) pd.Series(0,index=(['a','b','c'])
缺失数据概念
在数据处理中如果遇到NaN关键字那么意思就是缺失数据,并且NaN属于浮点型
dropna() # 过滤条值为空的行 fillna() # 填充缺失数据 isnull() # 返回布尔数组 notnull() # 返回布尔数组
数据修改规则
思考:如何判断当前数据是否改变呢?
总结的规律:
1.如果执行操作之后有结果说明原数据没有变 obj1.fillna(123) 2.如果执行操作之后没有结果说明元数据改变 obj1.fillna(123,inplace=True) # inplace = True (该参数很多方法都有) 意思就是直接改变原数据
布尔值索引
布尔值索引本质:就是按照对应关系筛选出True对应的数据
eg:
mask = pd.Series([True,False,False,True,False])
price = pd.Series([321312,123,324,5654,645])
1.price[mask] # 从price里取对应True的数据 2.price | mask # | 表示或的意思 3.(price>200) & (price<900) # & 表示且的意思
行索引/行标签
sr1.iloc[0] # 以行索引取值 sr1.loc['a'] # 以行标签取值
***只需要记住索引用这两种方法取就不会出现系统混乱的现象

浙公网安备 33010602011771号