pandas模块
- 小练习
- pandas模块简介
- 数据类型Series
- 缺失数据概念
小练习
1.计算数组每一行的平均值和每一列的最小数(不能使用axis参数)
# 调用模块 import numpy as np # 构造数组 a=np.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.]]) # 构造单位 b=[] # 循环获取数据 for i in a: # 获取平均值 b.append(np.average(i)) print(b) # 构造列表 d=[] # 循环获取数据 for i in range(a.shape[1]): # 获取最小值 d.append(np.min(a[:,i])) # 输出数据 print(d)
2.jason有10000块钱,去某赌场嗨皮
假设输赢概率都是50%,并且赢一场赚100,输一场亏100
jason总共玩了1500场,写程序计算1500场之后jason还剩多少钱
并将获得财产可视化
# 调用模块 import random import matplotlib.pyplot as plt # 生成钱 money=10000 # 记录变量 package=[] # 循环1500次 for i in range(1500): # 赢钱或输钱 pay=random.choices([-100,100]) # 最后财产 money+=pay[0] package.append(money) print('最后:%s'%money) # x轴与y轴坐标数据 plt.plot(range(1500),package) # 显示图像 plt.show()
pandas模块简介
pandas模块作用
基于Numpy构建,pandas的出现,让Python语言成为使用最广泛而且最强大的数据分析语言
pandas针对表格文件的操作有非常大的优势,尤其是数据量超过10万的
pandas的主要功能
1.具备诸多功能的两大数据结构:
Series和DataFrame都是基于Numpy构建出来的
公司中使用频繁的是DataFrame,而Series是构成DataFrame的基础,即一个DataFrame可能由多个Series构成
2.集成时间序列功能
3.提供丰富的数学运算和操作(基于Numpy)
4.灵活处理缺失数据
pandas的安装和导入
python的开发环境
pip3 install pandas
anaconda环境
conda install pandas # anaconda已经自动下载好了数据分析相关的模块,无需再下载
导入
import pandas import pandas as pd # 推荐起一个别名pd,方便使用
补充:
''' 数据分析三剑客模块使用频率很高,所以在很多ipynb文件的开头尽量提前导入 '''
数据类型Series
类似于一维数组对象,由数据和相关的标签(索引)组成
1.
import pandas as pd pd.Series([1,2,3,4,5])
2.
pd.Series([1,2,3,4,5],index=('a','b','c','d','e'))
3.
pd.Series({'a':1,'b':3})
4.
pd.Series(0,index=['a','b','c'])
缺失数据概念
在数据处理中如果遇到NaN关键字那么意思就是缺失数据,并且NaN属于浮点型
为什么会出现数据缺失
因为新的索引标签,无法与旧的序偶印标签对应所以产生缺失
# 定义字典 a={'j':1,'e':2,'a':5,'k':6} # 定义新索引 new={'k','j','a','b'} # 修改索引 d=pd.Series(a,index=new) print(d)
相关方法
dropna():过滤掉值为NaN的行
d.dropna()
fillna():填充缺失数据
d.fillna(4)
isnull():判断为缺失数据,返回布尔数组
d.isnull()
notnull():判断为不缺失数据, 返回布尔数组
d.notnull()
数据修改规则
如何判断当前数据是否改变
1.如果执行操作之后有结果说明原数据没有变
d.fillna(4)
2.如果执行操作之后没有结果说明原数据改变
# inplace=True该参数很多方法都有 意思就是直接改变原数据 d.fillna(4,inplace=True) d
布尔值索引
布尔值索引的本质就是按照对应关系筛选出True对应的数据
数据准备
mask = pd.Series([True,False,False,True,False]) price = pd.Series([321312,123,324,5654,645])
逻辑索引
price>500
输出price中值大于500的数
price[price>500]
输出price中大于500和小与1000的数
price[(price>500)&(price<1000)]
""" 针对&符号链接的条件都必须要加括号 """
结论:
'''布尔值索引,True输出,False不输出'''
补充:
price[mask]
price|mask
行索引\行标签
数据准备
f=pd.Series([1,2,3,4,5],index=('a','b','c','d','e'))
行索引取值
f.iloc[0]
标签取值
f.loc['a']