python学习--pandas高级应用
Pandas画图
1 pandas.DataFrame.plot
DataFrame.plot(kind='line')
kind : str,需要绘制图形的种类‘line’ : line plot (default)‘bar’ : vertical bar plot‘barh’ : horizontal bar plot关于“barh”的解释:http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.plot.barh.html‘hist’ : histogram‘pie’ : pie plot‘scatter’ : scatter plot更多细节:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.plot.html?highlight=plot#pandas.DataFrame.plot
2 pandas.Series.plot
更多细节:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.plot.html?highlight=plot#pandas.Series.plot
文件读取与存储
我们的数据大部分存在于文件当中,所以pandas会支持复杂的IO操作,pandas的API支持众多的文件格式,如CSV、SQL、XLS、JSON、HDF5。
1 CSV
1.1 read_csv
pandas.read_csv(filepath_or_buffer, sep =',', usecols )filepath_or_buffer:文件路径sep :分隔符,默认用","隔开usecols:指定读取的列名,列表形式举例:读取之前的股票的数据
# 读取文件,并且指定只获取'open', 'close'指标
data = pd.read_csv("./data/stock_day.csv", usecols=['open', 'close'])open close
2018-02-27 23.53 24.16
2018-02-26 22.80 23.53
2018-02-23 22.88 22.82
2018-02-22 22.25 22.28
2018-02-14 21.49 21.92
1.2 to_csv
DataFrame.to_csv(path_or_buf=None, sep=', ’, columns=None, header=True, index=True, mode='w', encoding=None)path_or_buf :文件路径sep :分隔符,默认用","隔开columns :选择需要的列索引header :boolean or list of string, default True,是否写进列索引值index:是否写进行索引mode:'w':重写, 'a' 追加举例:保存读取出来的股票数据保存'open'列的数据,然后读取查看结果
# 选取10行数据保存,便于观察数据
data[:10].to_csv("./data/test.csv", columns=['open'])# 读取,查看结果
pd.read_csv("./data/test.csv")Unnamed: 0 open
0 2018-02-27 23.53
1 2018-02-26 22.80
2 2018-02-23 22.88
3 2018-02-22 22.25
4 2018-02-14 21.49
5 2018-02-13 21.40
6 2018-02-12 20.70
7 2018-02-09 21.20
8 2018-02-08 21.79
9 2018-02-07 22.69
会发现将索引存入到文件当中,变成单独的一列数据。如果需要删除,可以指定index参数,删除原来的文件,重新保存一次。
# index:存储不会讲索引值变成一列数据
data[:10].to_csv("./data/test.csv", columns=['open'], index=False)
2 HDF5
2.1 read_hdf与to_hdf
HDF5文件的读取和存储需要指定一个键,值为要存储的DataFrame
pandas.read_hdf(path_or_buf,key =None,** kwargs)从h5文件当中读取数据path_or_buffer:文件路径key:读取的键return:Theselected objectDataFrame.to_hdf(path_or_buf, key, *\kwargs*)
2.2 案例
读取文件
day_close = pd.read_hdf("./data/day_close.h5")
存储文件
day_close.to_hdf("./data/test.h5", key="day_close")
再次读取的时候, 需要指定键的名字
new_close = pd.read_hdf("./data/test.h5", key="day_close")
注意:优先选择使用HDF5文件存储
HDF5在存储的时候支持压缩,使用的方式是blosc,这个是速度最快的也是pandas默认支持的
使用压缩可以提磁盘利用率,节省空间
HDF5还是跨平台的,可以轻松迁移到hadoop 上面
3 JSON
JSON是我们常用的一种数据交换格式,前面在前后端的交互经常用到,也会在存储的时候选择这种格式。所以我们需要知道Pandas如何进行读取和存储JSON格式。
3.1 read_json
pandas.read_json(path_or_buf=None, orient=None, typ='frame', lines=False)将JSON格式准换成默认的Pandas DataFrame格式orient : string,Indication of expected JSON string format.'split' : dict like {index -> [index], columns -> [columns], data -> [values]}split 将索引总结到索引,列名到列名,数据到数据。将三部分都分开了'records' : list like [{column -> value}, ... , {column -> value}]records 以columns:values的形式输出'index' : dict like {index -> {column -> value}}index 以index:{columns:values}...的形式输出'columns' : dict like {column -> {index -> value}},默认该格式colums 以columns:{index:values}的形式输出'values' : just the values arrayvalues 直接输出值lines : boolean, default False按照每行读取json对象typ : default ‘frame’, 指定转换成的对象类型series或者dataframe
3.2 read_josn 案例
数据介绍
这里使用一个新闻标题讽刺数据集,格式为json。is_sarcastic:1讽刺的,否则为0;headline:新闻报道的标题;article_link:链接到原始新闻文章。存储格式为:
{"article_link": "https://www.huffingtonpost.com/entry/versace-black-code_us_5861fbefe4b0de3a08f600d5", "headline": "former versace store clerk sues over secret 'black code' for minority shoppers", "is_sarcastic": 0}
{"article_link": "https://www.huffingtonpost.com/entry/roseanne-revival-review_us_5ab3a497e4b054d118e04365", "headline": "the 'roseanne' revival catches up to our thorny political mood, for better and worse", "is_sarcastic": 0}
读取
orient指定存储的json格式,lines指定按照行去变成一个样本
json_read = pd.read_json("./data/Sarcasm_Headlines_Dataset.json", orient="records", lines=True)
3.3 to_json
DataFrame.to_json(path_or_buf=None, orient=None, lines=False)将Pandas 对象存储为json格式path_or_buf=None:文件地址orient:存储的json形式,{‘split’,’records’,’index’,’columns’,’values’}lines:一个对象存储为一行
3.4 案例
存储文件
json_read.to_json("./data/test.json", orient='records')
结果
[{"article_link":"https:\/\/www.huffingtonpost.com\/entry\/versace-black-code_us_5861fbefe4b0de3a08f600d5","headli
修改lines参数为True
json_read.to_json("./data/test.json", orient='records', lines=True)
结果
{"article_link":"https:\/\/www.huffingtonpost.com\/entry\/versace-black-code_us_5861fbefe4b0de3a08f600d5","headline":"former versace store clerk sues over secret 'black code' for minority shoppers","is_sarcastic":0}
{"article_link":"https:\/\/www.huffingtonpost.com\/entry\/roseanne-revival-review_us_5ab3a497e4b054d118e04365","headline":"the 'roseanne' revival catches up to our thorny political mood, for better and worse","is_sarcastic":0}
{"article_link":"https:\/\/local.theonion.com\/mom-starting-to-fear-son-s-web-series-closest-thing-she-1819576697","headline":"mom starting to fear son's web series closest thing she will have to grandchild","is_sarcastic":1}
{"article_link":"https:\/\/politics.theonion.com\/boehner-just-wants-wife-to-listen-not-come-up-with-alt-1819574302","headline":"boehner just wants wife to listen, not come up with alternative debt-reduction ideas","is_sarcastic":1}
{"article_link":"https:\/\/www.huffingtonpost.com\/entry\/jk-rowling-wishes-snape-happy-birthday_us_569117c4e
高级处理-缺失值处理
1 如何处理nan
获取缺失值的标记方式(NaN或者其他标记方式)如果缺失值的标记方式是NaN判断数据中是否包含NaN:pd.isnull(df),pd.notnull(df)存在缺失值nan:1、删除存在缺失值的:dropna(axis='rows')注:不会修改原数据,需要接受返回值2、替换缺失值:fillna(value, inplace=True)value:替换成的值inplace:True:会修改原数据,False:不替换修改原数据,生成新的对象如果缺失值没有使用NaN标记,比如使用"?"先替换‘?’为np.nan,然后继续处理
2 电影数据的缺失值处理
电影数据文件获取
# 读取电影数据
movie = pd.read_csv("./data/IMDB-Movie-Data.csv")
2.1 判断缺失值是否存在
pd.notnull()
pd.notnull(movie)
np.all(pd.notnull(movie))
pd.isnull()
2.2 存在缺失值nan,并且是np.nan
1、删除
pandas删除缺失值,使用dropna的前提是,缺失值的类型必须是np.nan
# 不修改原数据
movie.dropna()# 可以定义新的变量接受或者用原来的变量名
data = movie.dropna()
2、替换缺失值
# 替换存在缺失值的样本的两列
# 替换填充平均值,中位数
# movie['Revenue (Millions)'].fillna(movie['Revenue (Millions)'].mean(), inplace=True)
替换所有缺失值:
for i in movie.columns:if np.all(pd.notnull(movie[i])) == False:print(i)movie[i].fillna(movie[i].mean(), inplace=True)
2.3 不是缺失值nan,有默认标记的
wis = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data")
以上数据在读取时,可能会报如下错误:
URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)>
解决办法:
全局取消证书验证
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
处理思路分析:
1、先替换‘?’为np.nandf.replace(to_replace=, value=)to_replace:替换前的值value:替换后的值
# 把一些其它值标记的缺失值,替换成np.nan
wis = wis.replace(to_replace='?', value=np.nan)
2、在进行缺失值的处理
# 删除
wis = wis.dropna()
高级处理-数据离散化
1 为什么要离散化
连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数。离散化方法经常作为数据挖掘的工具。
2 什么是数据的离散化
连续属性的离散化就是在连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数 值代表落在每个子区间中的属性值。
离散化有很多种方法,这使用一种最简单的方式去操作
原始人的身高数据:165,174,160,180,159,163,192,184
假设按照身高分几个区间段:150~165, 165~180,180~195
这样我们将数据分到了三个区间段,我可以对应的标记为矮、中、高三个类别,最终要处理成一个"哑变量"矩阵
3 股票的涨跌幅离散化
我们对股票每日的"p_change"进行离散化
3.1 读取股票的数据
先读取股票的数据,筛选出p_change数据
data = pd.read_csv("./data/stock_day.csv")
p_change= data['p_change']
3.2 将股票涨跌幅数据进行分组
使用的工具:
pd.qcut(data, q):对数据进行分组将数据分组,一般会与value_counts搭配使用,统计每组的个数
series.value_counts():统计分组次数
# 自行分组
qcut = pd.qcut(p_change, 10)
# 计算分到每个组数据个数
qcut.value_counts()
自定义区间分组:
pd.cut(data, bins)
# 自己指定分组区间
bins = [-100, -7, -5, -3, 0, 3, 5, 7, 100]
p_counts = pd.cut(p_change, bins)
3.3 股票涨跌幅分组数据变成one-hot编码
什么是one-hot编码把每个类别生成一个布尔列,这些列中只有一列可以为这个样本取值为1.其又被称为热编码。
把下图中左边的表格转化为使用右边形式进行表示:
pandas.get_dummies(data, prefix=None)data:array-like, Series, or DataFrameprefix:分组名字
# 得出one-hot编码矩阵
dummies = pd.get_dummies(p_counts, prefix="rise")
高级处理-合并
如果你的数据由多张表组成,那么有时候需要将不同的内容合并在一起分析
1 pd.concat实现数据合并
pd.concat([data1, data2], axis=1)按照行或列进行合并,axis=0为列索引,axis=1为行索引
比如我们将刚才处理好的one-hot编码与原数据合并
# 按照行索引进行
pd.concat([data, dummies], axis=1)
2 pd.merge
pd.merge(left, right, how='inner', on=None)可以指定按照两组数据的共同键值对合并或者左右各自left: DataFrameright: 另一个DataFrameon: 指定的共同键how:按照什么方式连接
2.1 pd.merge合并
left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],'key2': ['K0', 'K1', 'K0', 'K1'],'A': ['A0', 'A1', 'A2', 'A3'],'B': ['B0', 'B1', 'B2', 'B3']})right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],'key2': ['K0', 'K0', 'K0', 'K0'],'C': ['C0', 'C1', 'C2', 'C3'],'D': ['D0', 'D1', 'D2', 'D3']})# 默认内连接
result = pd.merge(left, right, on=['key1', 'key2'])
左连接
result = pd.merge(left, right, how='left', on=['key1', 'key2'])
右连接
result = pd.merge(left, right, how='right', on=['key1', 'key2'])
外链接
result = pd.merge(left, right, how='outer', on=['key1', 'key2'])
python学习--pandas高级应用相关推荐
- pandas排序csv文件并且按时间分类 python学习 pandas应用
具体实现功能:1.读取csv文件:2. 将文件中的数据按照CommitTime排序:3. 将排好序的数据每两个月作为训练数据,隔两个月作为测试数据,生成若干个文件,分别命名为:data_i_fit.c ...
- python高级数据分析_8、Python 数据分析-Pandas高级操作
1.替换操作replace() 替换操作可以同步作用于Series和DataFrame中 df = DataFrame(data=np.random.randint(0,20,size=(5,6))) ...
- Python学习 8day__高级语法
常用模块 - calendar - datetime - timeit - os - shutil - zip - math - string time 模块 时间戳 一个时间表示方法,不同语言,可以 ...
- Python学习之面向对象高级编程
Python学习目录 1. 在Mac下使用Python3 2. Python学习之数据类型 3. Python学习之函数 4. Python学习之高级特性 5. Python学习之函数式编程 6. P ...
- Python学习之面向对象编程
Python学习目录 在Mac下使用Python3 Python学习之数据类型 Python学习之函数 Python学习之高级特性 Python学习之函数式编程 Python学习之模块 Python学 ...
- 数据基础---《利用Python进行数据分析·第2版》第12章 pandas高级应用
之前自己对于numpy和pandas是要用的时候东学一点西一点,直到看到<利用Python进行数据分析·第2版>,觉得只看这一篇就够了.非常感谢原博主的翻译和分享. 前面的章节关注于不同类 ...
- python学习路线图(初级阶段,中级阶段,高级阶段)
python学习路线图 1 预备知识 1.1 python简介 1.2 程序设计思想 1.3 安装python 1.3.1 windows安装python 1.3.2 Linux安装python 1. ...
- Python之Pandas:利用Pandas函数实现对表格文件的查之高级查询(类似sql,分组查询等)之详细攻略
Python之Pandas:利用Pandas函数实现对表格文件的查之高级查询(类似sql,分组查询等)之详细攻略 目录 利用Pandas函数实现对表格文件的查之高级查询(类似sql) 1.分组查询
- python学习高级篇(part10)--类对象的特殊方法和特殊属性
学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 类对象的特殊方法之`__del__()` 类对象的特殊方法之`__getattr__()` 类对象的特殊方法之`__getitem__ ...
最新文章
- Cgroup 研究报告
- 《UML大战需求分析》阅读笔记01
- SpringBoot整合MyBatis-Plus分页查询
- 漫画:什么是HashMap?
- 暑假学习日记2013/7/26
- 重学java基础第十五课:java三大版本
- 【Kafka】Flink kafka 报错 Failed to send data to Kafka: Failed to allocate memory within the config
- WebRTC 聊天Demo
- 【2019南京网络赛:F】Greedy Sequence(set/线段树 + 思维)
- 移动互联网周刊第二期,不错,推荐给大家
- 云杰恒指:7.22恒指期货交易资讯复盘
- userland免root运行linux,UserLAnd(GNU/Linux安装)
- PS图层混合算法之五(饱和度,色相,颜色,亮度)
- 计算机二级在线模考,计算机二级模拟考试题2016
- Intent传递数据的方法
- 幼儿园的计算机一年级的教案,一年级活动教案
- screen 状态为Attached 连不上
- Axure rp 8中继器基础使用
- Kong 网关 快速入门
- 杰理之二、IO维持T卡升级死机问题【篇】
热门文章
- 两个博士读完,学术能力翻一倍?Nature专访三位「双料博士」
- Windows每五秒点击一次键盘保持不锁屏
- RecyclerView 多条目
- [Unity3D] MoveTowards、Lerp、Slerp
- Vue时间戳(年/月/日/时:分:秒and 刚刚/一分钟前···)
- 读书笔记-天才和凡人
- 使用Scratch制作打弹球游戏(五)-排名
- 不管风云如何变幻 企业有“云算盘”就够了
- springboot整合rocketmq,支持多连接生产者和消费者配置。不同topic适配不同业务处理类
- matlab两幅图重叠,matlab两幅图叠在一起