pandas模块补充
数据分析模块pandas和matplotlib补充
- 面向百度式编程
- 面向百度式工作
遇到没有见过的知识点或者是相关知识点一定不要慌,结合百度和已知的知识点去学习
pandas模块补充
基于numpy构建的
奠定了python数据分析领域的地位
两大数据结构
Series
DataFrame
读取和导出相关文件
文件命名
1.一旦软件出现了未知错误
有可能就是因为路径是中文的情况
推荐你们项目文件和软件目录的命名最好都用英文
简介
基于Numpy构建
pandas的出现,让Python语言成为使用最广泛而且强大的数据分析环境之一
pandas的主要功能
- 具备诸多功能的两大数据结构
Series、DataFrame
都是基于Numpy构建出来的
公司中使用频繁的是DataFrame,而Series是构成DataFrame的基础,即一个DataFrame可能由N个Series构成
- 集成时间序列功能
- 提供丰富的数学运算和操作(基于Numpy)
- 灵活处理缺失数据
下载
# python纯开发环境下
pip3 install pandas
# anaconda环境下
conda install pandas
'''anaconda已经自动帮助我们下载好了数据分析相关的模块,其实无需我们再下载'''
导入
import pandas as pd
# 固定起别名的句式
课程目标
1. 掌握外部数据的读取
2. 如何快速地认知数据的概览信息
3. 数据子集的筛选与清洗
4. 数据的汇总处理
5. 数据的合并与连接
数据结构之Series
# 是一种类似于一维数组对象,由数据和相关的标签(索引)组成
第一种:
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'])
缺失数据概念
st = {"tony":18,"yang":19,"bella":20,"cloud":21}
obj = pd.Series(st)
# 定义新索引
new_st = {'tony','yang','cloud','jason'}
# 修改原索引
obj1 = pd.Series(st,index=a)
# 查看数据变化
obj1
小疑问:为什么运算完之后数据类型会由原来的int64变成float64?
因为NaN其实是float类型
type(np.nan)
结果是:float
处理缺失数据
dropna() # 过滤掉值为NaN的行
fillna() # 填充缺失数据
isnull() # 返回布尔数组
notnull() # 返回布尔数组
补充:
对数据进行处理返回一个新的结果原数据不变,如果想要直接影响原数据需要加参数inplace=True
布尔选择器
mask = pd.Series([True,False,False,True,False])
price = pd.Series([321312,123,324,5654,645])
price[mask]
price|mask
price&mask
(price>200) & (price<900)
price[(price>200) & (price<900)] # 布尔求值
索引
res[1]
res['cd']
res.index
sr = pd.Series(np.arange(10))
sr1 = sr[3:].copy()
sr1[1] # 报错
sr1.iloc[1] # 以索引下标解释
sr1.loc[3] # 以标签解释
数据操作
res = pd.Series([...])
res['aaa'] = 666
res.iloc[0] = 888
res.append(pd.Series([999],index=['cd']))
res.set_value('cd',6969)
del res['cd']
基本算术方法
"""
add
sub
div
mul
"""
sr1 = pd.Series([12,23,34], index=['c','a','d'])
sr3 = pd.Series([11,20,10,14], index=['d','c','a','b'])
sr1.add(sr3,fill_value=0)
数据结构之DataFrame
表格型数据结构,相当于一个二维数组,含有一组有序的列也可以看作是由Series组成的共用一个索引的字典
第一种:
res = pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})
第二种:
pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3],index=['b','a','c'])})
第三种:
pd.DataFrame(np.array([10,20],[30,40]),index=['a','b'],columns=['c1','c2'])
更多
pd.DataFrame([np.arange(1,8),np.arange(11,18)])
s1 = pd.Series(np.arange(1,9,2))
s2 = pd.Series(np.arange(2,10,2))
s3 = pd.Series(np.arange(5,7),index=[1,2])
df5 = pd.DataFrame({'c1':s1,'c2':s2,'c3':s3})
"""
以上创建方式都仅仅做一个了解即可
因为工作中dataframe的数据一般都是来自于读取外部文件数据,而不是自己手动去创建
"""
常用属性及方法
1.index 行索引
2.columns 列索引
3.T 转置
4.values 值索引
5.describe 快速统计
外部数据读取
文本文件读取
pd.read_csv(filepath_or_buffer, sep=‘,', header='infer', names=None, usecols=None, skiprows=None, skipfooter=None, converters=None, encoding=None)
filepath_or_buffer:指定txt文件或csv文件所在的具体路径
sep:指定原数据集中各字段之间的分隔符,默认为逗号”,”
id name income
1 jason 10
header:是否需要将原数据集中的第一行作为表头,默认将第一行用作字段名称
如果原始数据没有表头需要将该参数设置为None
names:如果原数据集中没有字段,可以通过该参数在数据读取时给数据框添加具体的表头
usecols:指定需要读取原数据集中的哪些变量名
skiprows:数据读取时,指定需要跳过原数据集开头的行数
有一些表格开头是有几行文字说明的,读取的时候应该跳过
skipfooter:数据读取时,指定需要跳过原数据集末尾的行数
converters:用于数据类型的转换(以字典的形式指定)
encoding:如果文件中含有中文,有时需要指定字符编码
基本使用
import pandas as pd
data01 = pd.read_csv(r'data_test01.txt',
skiprows = 2, # python能自动过滤掉完全无内容的空行(写2、3都行)
sep = ',', # 默认就是逗号 写不写都行
skipfooter = 3,
)
# 1.针对id原本是01、02自动变成了1、2...
converters = {'id':str}
# 2.点击文件另存修改文件编码之后再次读取出现乱码
encoding='utf-8'
# 3.移除收入千分位非逗号的其他符号
thousands = '&'
# 4.手动将文件表头行删除再次读取
header = None # 默认用索引
names = ['id','year','month','day','gender','occupation','income']
# 5.指定读取的字段
usecols = ['id','income']
"""
查看方法帮助
方式1
方法名?
方式2
光标停留在方法名左括号后面
先按住shift键不松开,再按tab键(没反应就多按几次)
"""
excel表格读取
pd.read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None, names=None,
na_values=None, thousands=None, convert_float=True)
io:指定电子表格的具体路径
sheetname:指定需要读取电子表格中的第几个Sheet,既可以传递整数也可以传递具体的Sheet名称
header:是否需要将数据集的第一行用作表头,默认为是需要的
skiprows:读取数据时,指定跳过的开始行数
skip_footer:读取数据时,指定跳过的末尾行数
index_col:指定哪些列用作数据框的行索引(标签)
na_values:指定原始数据中哪些特殊值代表了缺失值
thousands:指定原始数据集中的千分位符
convert_float:默认将所有的数值型字段转换为浮点型字段
converters:通过字典的形式,指定某些列需要转换的形式
pd.read_excel(r'data_test02.xlsx',
header = None,
names = ['ID','Product','Color','Size'],
converters = {'ID':str}
)
数据库数据读取
# 在anaconda环境下直接安装
# pymysql模块
import pymysql
conn = pymysql.connect(host,port,user,password, database, charset)
host:指定需要访问的MySQL服务器
port:指定访问MySQL数据库的端口号 charset:指定读取MySQL数据库的字符集,如果数据库表中含有中文,一般可以尝试将该参数设置为 “utf8”或“gbk”
user:指定访问MySQL数据库的用户名
password:指定访问MySQL数据库的密码
database:指定访问MySQL数据库的具体库名
# 利用pymysql创建好链接MySQL的链接之后即可通过该链接操作MySQL
pd.read_sql('select * from user', con = conn)
conn.close() # 关闭链接
数据概览
df.columns # 查看列
df.index # 查看行
df.shape # 行列
df.dtypes # 数据类型
df.describe # 统计描述
默认只会统计数字类型的数据,非数字类型统计需要加参数include
sec_buildings.describe(include='object')
df.head() # 取头部多条数据
df.tail() # 取尾部多条数据
行列操作
df.rename(column={'旧列名称':'新列名称'},inplace=True)
# 能修改 但是会报个错误 可以添加下列配置
pd.set_option('mode.chained_assignment',None)
# 创建新的列
df['新列名称']=df.列名称/(df.列名称1+df.列名称2)
# 自定义位置
df.insert(3,'新列名称',新数据)
# 添加行
df3 = df1.append(df2)
数据筛选
# 获取指定列数据
df['列名']
df[['列名1','列名2',...]]
# 获取指定行数据
sec_buildings.loc[sec_buildings["region"] == '浦东',:]
sec_buildings.loc[(sec_buildings["region"] == '浦东') & (sec_buildings['size'] > 150),:]
sec_buildings.loc[(sec_buildings["region"] == '浦东') & (sec_buildings['size'] > 150),['name','tot_amt','price_unit']]
"""知识回顾:逻辑运算符链接条件 条件最好用括号括起来"""
数据处理
sec_car = pd.read_csv(r'sec_cars.csv')
sec_car.head()
sec_car.dtypes
sec_car.Boarding_time = pd.to_datetime(sec_car.Boarding_time, format = '%Y年%m月')
sec_car.New_price = sec_car.New_price.str[:-1].astype(float)
data = pd.read_excel(r'data_test04.xlsx')
data.head()
data.duplicated() # 判断是否有重复行
如果想单独判断某列是否有重复需要加参数subset
data.drop_duplicates(inplace= True)
异常值识别与处理
异常值的识别与处理
1. Z得分法
2. 分位数法
3. 距离法
缺失值处理
缺失值的识别与处理
1. df.isnull
2. df.fillna
3. df.dropna
data05 = pd.read_excel(r'data_test05.xlsx')
data05.head()
data05.isnull() # 统计每个数据项是否有缺失
data05.isnull().any(axis = 0) # 统计列字段下是否含有缺失
# 计算各列数据的缺失比例
data05.isnull().sum(axis = 0)/data05.shape[0]
data05.dropna()
data05.fillna(value=0) # 将所有的缺失值填充为0(不合理)
# 针对不同的缺失值使用合理的填充手段
data05.fillna(value = {
'gender':data05.gender.mode()[0], # 众数:可以有一个也可能是多个
'age':data05.age.mean(), # 平均值
'income':data05.income.median() # 中位数
}, inplace = True)
pandas模块补充的更多相关文章
- pandas模块(很详细归类),pd.concat(后续补充)
6.12自我总结 一.pandas模块 import pandas as pd约定俗称为pd 1.模块官方文档地址 https://pandas.pydata.org/pandas-docs/stab ...
- 开发技术--pandas模块
开发|pandas模块 整了一篇关于pandas模块的使用文章,方便检查自己的学习质量.自从使用了pandas之后,真的是被它的功能所震撼~~~ 前言 目前所有的文章思想格式都是:知识+情感. 知识: ...
- [Python]-pandas模块-机器学习Python入门《Python机器学习手册》-02-加载数据:加载文件
<Python机器学习手册--从数据预处理到深度学习> 这本书类似于工具书或者字典,对于python具体代码的调用和使用场景写的很清楚,感觉虽然是工具书,但是对照着做一遍应该可以对机器学习 ...
- 文成小盆友python-num7 -常用模块补充 ,python 牛逼的面相对象
本篇内容: 常用模块的补充 python面相对象 一.常用模块补充 1.configparser模块 configparser 用于处理特定格式的文件,起内部是调用open()来实现的,他的使用场景是 ...
- python之pandas模块
一.pandas模块是基于Numpy模块的,pandas的主要数据结构是Series和DadaFrame,下面引入这样的约定: from pandas import Series,DataFrame ...
- Python 数据处理扩展包: numpy 和 pandas 模块介绍
一.numpy模块 NumPy(Numeric Python)模块是Python的一种开源的数值计算扩展.这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list str ...
- 关于Python pandas模块输出每行中间省略号问题
关于Python数据分析中pandas模块在输出的时候,每行的中间会有省略号出现,和行与行中间的省略号....问题,其他的站点(百度)中的大部分都是瞎写,根本就是复制黏贴以前的版本,你要想知道其他问题 ...
- Pandas模块
前言: 最近公司有数据分析的任务,如果使用Python做数据分析,那么对Pandas模块的学习是必不可少的: 本篇文章基于Pandas 0.20.0版本 话不多说社会你根哥!开干! pip insta ...
- pandas模块实现小爬虫功能-转载
pandas模块实现小爬虫功能 安装 pip3 install pandas 爬虫代码 import pandas as pd df = pd.read_html("http://www.a ...
随机推荐
- 日志模块详细介绍 hashlib模块 动态加盐
目录 一:hashlib模块 二:logging 一:hashlib模块 加密: 将明文数据通过一系列算法变成密文数据(目的就是为了数据的安全) 能够做文件一系列校验 python的hashlib提供 ...
- Vue3.2中的setup语法糖,保证你看的明明白白!
vue3.2 到底更新了什么? 根据原文内容的更新的内容主要有以下 5 块: 1.SSR:服务端渲染优化.@vue/server-renderer包加了一个ES模块创建, 与Node.js解耦,使在非 ...
- Spring系列8:bean的作用域
本文内容 bean定义信息的意义 介绍6种bean的作用域 bean定义信息的意义 Spring中区分下类.类定义信息,类实例对象的概念?不容易理解,以餐馆中点炒饭为例. 类: 相当于你看到菜单上炒饭 ...
- Homework_1
寒假第一份作业 一.博客园部分 1.个人博客园链接 Click here 2.markdown界面截图 我用typora编辑 所以贴上typora界面的截图 二.Github部分 1.个人Github ...
- 用最笨的方法实现java控制台日历打印
如果想用户自定义输入日期查询,可以通过Calendar的set方法和Scanner方法设置 Calendar类简单使用:https://blog.csdn.net/weixin_43670802/ar ...
- JS 中的GB2312转UTF8和UTF8转GB2312
转载请注明来源:https://www.cnblogs.com/hookjc/ JS:encodeURI encodeURI(URIString)必选的 URIString 参数代表一个已编码的 UR ...
- 关于IBAction、IBOutlet前缀IB的解释
- 全称:Interface Builder - 以前的UI界面开发模式:Xcode3 + Interface Builder - 从Xcode4开始,Interface Builder已经整合到Xc ...
- lua语言:string
转载请注明来源:https://www.cnblogs.com/hookjc/ 字符串库函数string.len(s) 返回字符串s的长度:string.rep(s, n) ...
- GRC: 个人信息保护法, 个人隐私, 企业风险合规治理
声明 个人原创, 转载需注明来源 https://www.cnblogs.com/milton/p/15885344.html 个人信息保护的历史和现状 个人信息保护的立法可追溯至德国黑森州1970年 ...
- Solution -「APIO 2016」「洛谷 P3643」划艇
\(\mathcal{Description}\) Link & 双倍经验. 给定 \(n\) 个区间 \([a_i,b_i)\)(注意原题是闭区间,这里只为方便后文描述),求 \(\ ...