pandas读取与存储操作详解
项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步
1.前言
pandas可以将读取到的数据(不一定是csv或者txt)转换成dataframe,然后后面可以方便地对dataframe进行操作,进行各种数据分析工作。下面我们对pandas里常用的一些IO操作进行详细的分析。
2.read_csv
read_csv最常用的方式是从文件中读取数据,read_csv默认的分隔符号是逗号
示例数据:
57647:0.059819,26223:0.048002,100295:0.055268,60232:0.049508
35824:0.04753,57776:0.055802,40677:0.049119,14445:0.040235
102136:0.052933,3736:0.07613,21681:0.10266,44816:0.058018
不指定列名称
def read11():data = pd.read_csv("../data/tt3", header=None)print data
0 1 2 3
0 57647:0.059819 26223:0.048002 100295:0.055268 60232:0.049508
1 35824:0.04753 57776:0.055802 40677:0.049119 14445:0.040235
2 102136:0.052933 3736:0.07613 21681:0.10266 44816:0.058018
指定列名称
def read12():data = pd.read_csv("../data/tt3", header=None, names=['c1', 'c2', 'c3', 'c4'])print data
c1 c2 c3 c4
0 57647:0.059819 26223:0.048002 100295:0.055268 60232:0.049508
1 35824:0.04753 57776:0.055802 40677:0.049119 14445:0.040235
2 102136:0.052933 3736:0.07613 21681:0.10266 44816:0.058018
上面的数据都不带表头,所以设置header=None
3.read_table
read_csv默认的分隔符是逗号,如果想改变分隔符,可以用read_table指定分隔符
数据
8803b236442fed8a37a5beb04556f684 54530 1 0
f4afa2b8f50e8aacf967628b3dc11bff 102017 1 0
4077bb0001ba73f4dd966a7f6fb46075 50276 1 0
代码
def read21():data = pd.read_table("../data/tt1", header=None, sep='\t')print datadef read22():data = pd.read_table("../data/tt1", header=None, sep='\t', names=['c1', 'c2', 'c3', 'c4'])print dataread21()
read22()
FutureWarning: read_table is deprecated, use read_csv instead.data = pd.read_table("../data/tt1", header=None, sep='\t')0 1 2 3
0 8803b236442fed8a37a5beb04556f684 54530 1 0
1 f4afa2b8f50e8aacf967628b3dc11bff 102017 1 0
2 4077bb0001ba73f4dd966a7f6fb46075 50276 1 0
FutureWarning: read_table is deprecated, use read_csv instead.data = pd.read_table("../data/tt1", header=None, sep='\t', names=['c1', 'c2', 'c3', 'c4'])c1 c2 c3 c4
0 8803b236442fed8a37a5beb04556f684 54530 1 0
1 f4afa2b8f50e8aacf967628b3dc11bff 102017 1 0
2 4077bb0001ba73f4dd966a7f6fb46075 50276 1 0
根据提示来看,read_table方法后面会被废弃,统一用read_csv方法。
4.设置索引
def read31():data = pd.read_csv("../data/tt3", header=None, names=['c1', 'c2', 'c3', 'c4'], index_col='c2')print dataread31()
c1 c3 c4
c2
26223:0.048002 57647:0.059819 100295:0.055268 60232:0.049508
57776:0.055802 35824:0.04753 40677:0.049119 14445:0.040235
3736:0.07613 102136:0.052933 21681:0.10266 44816:0.058018
跟之前的结果对比,如果设置了index_col来设置列索引,原来默认从0开始的整数索引不见了。之前没设置索引的时候,默认是按行号从0开始设置索引的。
def read32():data = pd.read_csv("../data/tt3", header=None, names=['c1', 'c2', 'c3', 'c4'], index_col=['c2', 'c1'])print data
c3 c4
c2 c1
26223:0.048002 57647:0.059819 100295:0.055268 60232:0.049508
57776:0.055802 35824:0.04753 40677:0.049119 14445:0.040235
3736:0.07613 102136:0.052933 21681:0.10266 44816:0.058018
上面的例子为指定多个列为索引
5.缺失值删除
实际数据肯定会比较脏,不会特别干净,有缺失值的情况很常见,填充缺失值就成了数据预处理中一项很重要的工作。
pandas在读取文件时,默认会将NA, NULL等特殊字符串当成缺失值,默认会使用NaN进行替换。
数据如下
8803b236442fed8a37a5beb04556f684 54530 1 0 abc NULL
f4afa2b8f50e8aacf967628b3dc11bff 102017 1 0 NULL NULL
4077bb0001ba73f4dd966a7f6fb46075 50276 1 0 NULL NULL
4077bb0001ba73f4dd966a7f6fb46075 50276 1 0 456 123
def read41():data = pd.read_table("../data/tt2", header=None, sep='\t')print data
0 1 2 3 4 5
0 8803b236442fed8a37a5beb04556f684 54530 1 0 abc NaN
1 f4afa2b8f50e8aacf967628b3dc11bff 102017 1 0 NaN NaN
2 4077bb0001ba73f4dd966a7f6fb46075 50276 1 0 NaN NaN
3 4077bb0001ba73f4dd966a7f6fb46075 50276 1 0 456 123.0
5.1删除含有缺失值的行与列
def read42():data = pd.read_table("../data/tt2", header=None, sep='\t')print data.dropna()
0 1 2 3 4 5
3 4077bb0001ba73f4dd966a7f6fb46075 50276 1 0 456 123.0
dropna删除含有缺失值的行。如果想删除含有缺失值的列,可以指定axis=1
def read42():data = pd.read_table("../data/tt2", header=None, sep='\t')print data.dropna(axis=1)
0 1 2 3
0 8803b236442fed8a37a5beb04556f684 54530 1 0
1 f4afa2b8f50e8aacf967628b3dc11bff 102017 1 0
2 4077bb0001ba73f4dd966a7f6fb46075 50276 1 0
3 4077bb0001ba73f4dd966a7f6fb46075 50276 1 0
5.2删除全为NaN的行或者列
数据如下
8803b236442fed8a37a5beb04556f684 54530 1 0 abc NULL
f4afa2b8f50e8aacf967628b3dc11bff 102017 1 0 NULL NULL
4077bb0001ba73f4dd966a7f6fb46075 50276 1 0 NULL NULL
NULL NaN NULL NULL NULL NULL
def read43():data = pd.read_table("../data/tt2", header=None, sep='\t')print data.dropna(how='all')print data.dropna(how='all', axis=1)
0 1 2 3 4 5
0 8803b236442fed8a37a5beb04556f684 54530.0 1.0 0.0 abc NaN
1 f4afa2b8f50e8aacf967628b3dc11bff 102017.0 1.0 0.0 NaN NaN
2 4077bb0001ba73f4dd966a7f6fb46075 50276.0 1.0 0.0 NaN NaN0 1 2 3 4
0 8803b236442fed8a37a5beb04556f684 54530.0 1.0 0.0 abc
1 f4afa2b8f50e8aacf967628b3dc11bff 102017.0 1.0 0.0 NaN
2 4077bb0001ba73f4dd966a7f6fb46075 50276.0 1.0 0.0 NaN
3 NaN NaN NaN NaN NaN
6.缺失值填充
更多的时候,我们是需要对缺失值进行填充而不是删除,下面看看怎么填充缺失值。
数据
8803b236442fed8a37a5beb04556f684 54530 1 0 abc NULL
f4afa2b8f50e8aacf967628b3dc11bff 102017 1 0 NULL NULL
4077bb0001ba73f4dd966a7f6fb46075 50276 1 0 NULL NULL
NULL NaN NULL NULL NULL NULL
6.1 所有缺失值按相同值填充
def read51():data = pd.read_table("../data/tt2", header=None, sep='\t')print data.fillna(0)
0 1 2 3 4 5
0 8803b236442fed8a37a5beb04556f684 54530.0 1.0 0.0 abc 0.0
1 f4afa2b8f50e8aacf967628b3dc11bff 102017.0 1.0 0.0 0 0.0
2 4077bb0001ba73f4dd966a7f6fb46075 50276.0 1.0 0.0 0 0.0
3 0 0.0 0.0 0.0 0 0.0
6.2 不同列填充不同值
上面的填充方式太过简单粗暴,实际中我们一般不会这么干,而是会按照不同列填充会比较多。
def read52():data = pd.read_table("../data/tt2", header=None, sep='\t', names=['c1', 'c2', 'c3', 'c4', 'c5', 'c6'])print data.fillna({'c3': 'c3default', 'c4': 'c4default'})
c1 c2 c3 c4 c5 c6
0 8803b236442fed8a37a5beb04556f684 54530.0 1 0 abc NaN
1 f4afa2b8f50e8aacf967628b3dc11bff 102017.0 1 0 NaN NaN
2 4077bb0001ba73f4dd966a7f6fb46075 50276.0 1 0 NaN NaN
3 NaN NaN c3default c4default NaN NaN
6.3 前向填充与后向填充
def read53():data = pd.read_table("../data/tt2", header=None, sep='\t', names=['c1', 'c2', 'c3', 'c4', 'c5', 'c6'])print data.fillna(method='ffill')print data.fillna(method='bfill')
c1 c2 c3 c4 c5 c6
0 8803b236442fed8a37a5beb04556f684 54530.0 1.0 0.0 abc NaN
1 f4afa2b8f50e8aacf967628b3dc11bff 102017.0 1.0 0.0 abc NaN
2 4077bb0001ba73f4dd966a7f6fb46075 50276.0 1.0 0.0 abc NaN
3 4077bb0001ba73f4dd966a7f6fb46075 50276.0 1.0 0.0 abc NaNc1 c2 c3 c4 c5 c6
0 8803b236442fed8a37a5beb04556f684 54530.0 1.0 0.0 abc NaN
1 f4afa2b8f50e8aacf967628b3dc11bff 102017.0 1.0 0.0 NaN NaN
2 4077bb0001ba73f4dd966a7f6fb46075 50276.0 1.0 0.0 NaN NaN
3 NaN NaN NaN NaN NaN NaN
ffill为前向填充,使用默认是上一行的值,设置axis=1可以使用列进行填充
bfill为后向填充,使用下一行的值,不存在的时候就不填充
6.4 使用列均值填充
def read54():data = pd.read_table("../data/tt2", header=None, sep='\t', names=['c1', 'c2', 'c3', 'c4', 'c5', 'c6'])print data.fillna(data.mean())
c1 c2 c3 c4 c5 c6
0 8803b236442fed8a37a5beb04556f684 54530.0 1.0 0.0 abc NaN
1 f4afa2b8f50e8aacf967628b3dc11bff 102017.0 1.0 0.0 NaN NaN
2 4077bb0001ba73f4dd966a7f6fb46075 50276.0 1.0 0.0 NaN NaN
3 NaN 68941.0 1.0 0.0 NaN NaN
7.跳过某些行
8803b236442fed8a37a5beb04556f684 54530 1 0 abc NULL
test
f4afa2b8f50e8aacf967628b3dc11bff 102017 1 0 NULL NULL
test
4077bb0001ba73f4dd966a7f6fb46075 50276 1 0 NULL NULL
NULL NaN NULL NULL NULL NULL
def read61():data1 = pd.read_table("../data/tt2", header=None, sep='\t', names=['c1', 'c2', 'c3', 'c4', 'c5', 'c6'])print data1data2 = pd.read_table("../data/tt2", header=None, sep='\t', names=['c1', 'c2', 'c3', 'c4', 'c5', 'c6'], skiprows=[1, 3])print data2
c1 c2 c3 c4 c5 c6
0 8803b236442fed8a37a5beb04556f684 54530.0 1.0 0.0 abc NaN
1 test NaN NaN NaN NaN NaN
2 f4afa2b8f50e8aacf967628b3dc11bff 102017.0 1.0 0.0 NaN NaN
3 test NaN NaN NaN NaN NaN
4 4077bb0001ba73f4dd966a7f6fb46075 50276.0 1.0 0.0 NaN NaN
5 NaN NaN NaN NaN NaN NaNc1 c2 c3 c4 c5 c6
0 8803b236442fed8a37a5beb04556f684 54530.0 1.0 0.0 abc NaN
1 f4afa2b8f50e8aacf967628b3dc11bff 102017.0 1.0 0.0 NaN NaN
2 4077bb0001ba73f4dd966a7f6fb46075 50276.0 1.0 0.0 NaN NaN
3 NaN NaN NaN NaN NaN NaN
8.读取json
数据为
{"apples": {"June": 3,"Robert": 2,"Lily": 0,"David": 1},"oranges": {"June": 0,"Robert": 3,"Lily": 7,"David": 2}
}
def read71():data = pd.read_json("../data/tt2")print data
apples oranges
David 1 2
June 3 0
Lily 0 7
Robert 2 3
pandas读取与存储操作详解相关推荐
- python怎么重命名word文件,Python读取word文本操作详解
本文研究的主要问题时Python读取word文本操作,分享了相关概念和实现代码,具体如下. 一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就 ...
- office是python打开方式_Python读取word文本操作详解
本文研究的主要问题时Python读取word文本操作,分享了相关概念和实现代码,具体如下. 一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就 ...
- python读取word内容复制粘贴,Python读取word文本操作详解
本文研究的主要问题时Python读取word文本操作,分享了相关概念和实现代码,具体如下. 一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就 ...
- 一文速学-Pandas处理时间序列数据操作详解
目录 前言 一.获取时间 二.时间索引 三.时间推移 参阅 前言 一般从数据库或者是从日志文件读出的数据均带有时间序列,做时序数据处理或者实时分析都需要对其时间序列进行归类归档.而Pandas是处理这 ...
- tensorflow 读取cifar_对tensorflow中cifar-10文档的Read操作详解
前言 在tensorflow的官方文档中得卷积神经网络一章,有一个使用cifar-10图片数据集的实验,搭建卷积神经网络倒不难,但是那个cifar10_input文件着实让我费了一番心思.配合着官方文 ...
- python列转行函数_Python pandas 列转行操作详解(类似hive中explode方法)
最近在工作上用到Python的pandas库来处理excel文件,遇到列转行的问题.找了一番资料后成功了,记录一下. 1. 如果需要爆炸的只有一列: df=pd.DataFrame({'A':[1,2 ...
- Mysql存储引擎详解(MyISAM与InnoDB的区别)
Mysql存储引擎详解(MyISAM与InnoDB的区别) 存储引擎 MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平 ...
- 最全整理!Python 操作 Excel 库 xlrd与xlwt 常用操作详解!
来源/早起Python 在之前的Python办公自动化系列文章中,我们已经相信介绍了openyxl.xlsxwriter等Python操作Excel库. 相信大家对于几个库的差异与使用场景有了一定的认 ...
- java对文件的操作详解_Java 对 Properties 文件的操作详解及简单实例
Java 对 Properties 文件的操作详解及简单实例 发布于 2020-8-7| 复制链接 摘记: Java 对 Properties 文件的操作简介在 Java 中,我们常用 java.ut ...
- C 和 C++ 文件操作详解
来源:http://www.cnblogs.com/likebeta/archive/2012/06/16/2551662.html 来源:http://www.cnblogs.com/likebet ...
最新文章
- 包区别 版本_详解Linux下二进制包、源代码包、rpm包区别与联系
- 优化网站性能 提高网站速度访问速度的14条实践
- mysql+性能优化+命令_MySQL性能优化
- mfc嵌入matlab绘图窗口,将matlab的图嵌入MFC
- java 析构函数_C++与Java的区别(一)
- mysqld_multi stop 不能停掉mysql
- int 转CString
- 151.翻转字符串里的单词
- 2022年最新宁夏机动车签字授权人模拟试题及答案
- MySQL数据分析-(12)表操作补充:字段属性
- matlab 折射率椭球,一、折射率椭球.ppt
- P3369 普通平衡树模板 treap
- TiCDC同步延迟问题处理
- python后端开发简历分享_Python后端开发工程师面试
- php获取蓝凑云文件列表,PHP获取蓝奏云直链下载地址
- 应用程序无法正常启动(0xc000007b)的解决办法
- 入职两年申请涨薪3K被拒,是我平时好脸给多了?转身立马裸辞走人...
- tk.mybatis.mapper.MapperException: 无法获取实体类com.leyou.work.entity.Brand对应的表名!
- 第三部分:成交动力学之十大成交激素——8、稀缺性
- 现代计算机理论模型与工作方式
热门文章
- spring cloud微服务分布式云架构 - Spring Cloud集成项目简介( java ssm spring boot b2b2c o2o 多租户电子...
- 重磅!Intel联合OpenStack基金会发布Kata Container项目
- JavaScript强化教程——AngularJS 表达式
- 如何开发一款高大上的android应用的必备知识
- Avoiding GREEDYDATA for logstash'grok
- python open 文件操作
- 3.工作组环境下的应用
- awstats日志分析小结
- 面向对象-属性查找与绑定方法
- Debian9用户态下安装pipenv