项目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读取与存储操作详解相关推荐

  1. python怎么重命名word文件,Python读取word文本操作详解

    本文研究的主要问题时Python读取word文本操作,分享了相关概念和实现代码,具体如下. 一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就 ...

  2. office是python打开方式_Python读取word文本操作详解

    本文研究的主要问题时Python读取word文本操作,分享了相关概念和实现代码,具体如下. 一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就 ...

  3. python读取word内容复制粘贴,Python读取word文本操作详解

    本文研究的主要问题时Python读取word文本操作,分享了相关概念和实现代码,具体如下. 一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就 ...

  4. 一文速学-Pandas处理时间序列数据操作详解

    目录 前言 一.获取时间 二.时间索引 三.时间推移 参阅 前言 一般从数据库或者是从日志文件读出的数据均带有时间序列,做时序数据处理或者实时分析都需要对其时间序列进行归类归档.而Pandas是处理这 ...

  5. tensorflow 读取cifar_对tensorflow中cifar-10文档的Read操作详解

    前言 在tensorflow的官方文档中得卷积神经网络一章,有一个使用cifar-10图片数据集的实验,搭建卷积神经网络倒不难,但是那个cifar10_input文件着实让我费了一番心思.配合着官方文 ...

  6. python列转行函数_Python pandas 列转行操作详解(类似hive中explode方法)

    最近在工作上用到Python的pandas库来处理excel文件,遇到列转行的问题.找了一番资料后成功了,记录一下. 1. 如果需要爆炸的只有一列: df=pd.DataFrame({'A':[1,2 ...

  7. Mysql存储引擎详解(MyISAM与InnoDB的区别)

    Mysql存储引擎详解(MyISAM与InnoDB的区别) 存储引擎     MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平 ...

  8. 最全整理!Python 操作 Excel 库 xlrd与xlwt 常用操作详解!

    来源/早起Python 在之前的Python办公自动化系列文章中,我们已经相信介绍了openyxl.xlsxwriter等Python操作Excel库. 相信大家对于几个库的差异与使用场景有了一定的认 ...

  9. java对文件的操作详解_Java 对 Properties 文件的操作详解及简单实例

    Java 对 Properties 文件的操作详解及简单实例 发布于 2020-8-7| 复制链接 摘记: Java 对 Properties 文件的操作简介在 Java 中,我们常用 java.ut ...

  10. C 和 C++ 文件操作详解

    来源:http://www.cnblogs.com/likebeta/archive/2012/06/16/2551662.html 来源:http://www.cnblogs.com/likebet ...

最新文章

  1. 包区别 版本_详解Linux下二进制包、源代码包、rpm包区别与联系
  2. 优化网站性能 提高网站速度访问速度的14条实践
  3. mysql+性能优化+命令_MySQL性能优化
  4. mfc嵌入matlab绘图窗口,将matlab的图嵌入MFC
  5. java 析构函数_C++与Java的区别(一)
  6. mysqld_multi stop 不能停掉mysql
  7. int 转CString
  8. 151.翻转字符串里的单词
  9. 2022年最新宁夏机动车签字授权人模拟试题及答案
  10. MySQL数据分析-(12)表操作补充:字段属性
  11. matlab 折射率椭球,一、折射率椭球.ppt
  12. P3369 普通平衡树模板 treap
  13. TiCDC同步延迟问题处理
  14. python后端开发简历分享_Python后端开发工程师面试
  15. php获取蓝凑云文件列表,PHP获取蓝奏云直链下载地址
  16. 应用程序无法正常启动(0xc000007b)的解决办法
  17. 入职两年申请涨薪3K被拒,是我平时好脸给多了?转身立马裸辞走人...
  18. tk.mybatis.mapper.MapperException: 无法获取实体类com.leyou.work.entity.Brand对应的表名!
  19. 第三部分:成交动力学之十大成交激素——8、稀缺性
  20. 现代计算机理论模型与工作方式

热门文章

  1. spring cloud微服务分布式云架构 - Spring Cloud集成项目简介( java ssm spring boot b2b2c o2o 多租户电子...
  2. 重磅!Intel联合OpenStack基金会发布Kata Container项目
  3. JavaScript强化教程——AngularJS 表达式
  4. 如何开发一款高大上的android应用的必备知识
  5. Avoiding GREEDYDATA for logstash'grok
  6. python open 文件操作
  7. 3.工作组环境下的应用
  8. awstats日志分析小结
  9. 面向对象-属性查找与绑定方法
  10. Debian9用户态下安装pipenv