零基础学编程034:解决一个pandas问题

昨天一位朋友问了一个程序问题:一个csv电子表格文件,里面有不规范数据,如何用pandas的dataframe,将某一列是空值的记录行删掉。

收到了CSV文件,如果RPROC_DMS_ID没有内容,则该行剔除。

该问题的最终答案并不太重要,更关键的是问题的解决思路和过程。我听说过pandas,但并没有用它写过一行相关代码,但这并不妨碍我解决这个问题。

运用《零基础都需要哪些基础》里提到的搜索技巧,第一种直接的办法是谷歌搜索。我以前学过R语言,知道这个dataframe的大概功能,这种问题在大数据分析里称为数据清洗,需要将不规范的数据(例如空值null)剔除掉。我马上想到的搜索关键字是pandas dataframe filter null。

第三条搜索结果的drop rows与我的问题描述太吻合了,直接点开这个网页,里面有一行简短的说明和代码。

第一步:安装pandas

在《站在巨人的肩膀上》里已经学会了安装程序包,重复一次那个过程:

python -m pip install pandas

第二步:读入csv文件

由于我以前没学过pandas,所以仍是搜索pandas read csv,发现了这行代码:

import pandas
df = pandas.read_csv('data.csv')

运行出错,错误信息:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa8 in position 3: 
invalid start byte

看到utf-8,再根据以前的编程经验,感觉是字符集不正确。翻阅read_csv()函数的帮助,发现了encoding选项,又因为csv文件中并没有汉字,看来也不可能是GBK等字符集,先试试 iso-8859-1 吧,竟然直接通过!

df = pandas.read_csv('data.csv', encoding='iso-8859-1')

第三步:筛选数据

把搜索到的代码直接录入,字段名换换。

df2 = df[np.isfinite(df['RPROC_DMS_ID'])]

又报错:NameError: name 'np' is not defined

在《零基础学编程012:画出复利曲线图》里,我见过numpy被缩写为np,看来就是它的问题。

import numpy
df2 = df[numpy.isfinite(df['RPROC_DMS_ID'])]

运行正常,看看记录数变化了吗?

print(len(df), len(df2))

看到记录数从10683变成了10000行,看来好像是完成任务了。检查的办法还需要其它函数,这里不展开介绍了。

小结:

  • 学会搜索,多试试不同的关键字
  • 以前的R语言经验对理解dataframe有帮助
  • 数据挖掘的知识也有帮助
  • utf-8、iso-8859-1、GBK字符集的知识
  • 以前用过numpy程序包,解决了np出错的问题
  • 解决具体的问题不难,但学习pandas还得一步一步地来

最终代码:

import numpy
import pandas
df = pandas.read_csv('data.csv', encoding='iso-8859-1')
df2 = df[numpy.isfinite(df['RPROC_DMS_ID'])]
print(len(df), len(df2))

--- END ---

原文发布于微信公众号 - 申龙斌的程序人生(slbGTD)

原文发表时间:2017-03-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏解Bug之路

解Bug之路-TCP粘包Bug

详情见笔者另一篇博客https://my.oschina.net/alchemystar/blog/833937

902
来自专栏量化投资与机器学习

战斗民族开源神器ClickHouse:一款适合于构建量化回测研究系统的高性能列式数据库(一)

编辑部原创 编译:wally21st、 西西 未经允许,不得转载 对于一些私募、投资机构和个人来说,量化投资研究、回测离不开数据的支持。当数据量达到一定数量,如...

4608
来自专栏Jerry的SAP技术分享

SAP S4CRM 1811 服务订单API介绍

Jerry在今年2月28日,SAP Customer Management for S/4HANA 1.0正式问世这个具有纪念意义的日子,同时发布了中英文版的博...

1153
来自专栏编程一生

架构师之路--搜索业务和技术介绍及容错机制

942
来自专栏沃趣科技

容器化RDS|计算存储分离架构下的IO优化

在基于 Kubernetes 和 Docker 构建的私有 RDS 中, 普遍采用了计算存储分离架构. 该架构优势明显, 但对于数据库类 Latency Sen...

4646
来自专栏数据和云

从一个故障案例看强大到令人发紫的Oracle数据库--我和数据中心的故事

作为一名混迹数据库江湖十几年的老DBA,当你对关系型数据库的了解越来越深入时,你会发现,Oracle数据库真的是强大到令人发紫! Oracle数据库的强大,不仅...

2794
来自专栏技术小黑屋

解决Octopress博客访问慢的问题

买了这个域名已经一周了,已经决定博客的面向群体为汉语用户。但是发现国内访问还是超级慢,慢的让人无法接收了,当然具体原因,大家都懂得。没办法,尝试使用过安全宝,速...

952
来自专栏微服务生态

小程聊微服务-数据抽取那点事(二)

ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程),对于企业或行业应用来说,我们经常会遇到各种数据的处理,转换,迁移,所...

692
来自专栏UML

什么是实体关系图(ERD)?

实体 - 关系(ER)图(也称为ERD或ER模型)是Peter最初在1976年提出的经典且流行的概念数据模型。它是系统内不同实体的视觉表示以及它们如何相互关联。...

2035
来自专栏牛客网

爱奇艺现场面试总结

一面: java内存模型:问面试官是jmm还是jvm,说是jvm,说了说分区 堆内存:说了堆内存划分和理由,各种内存的分配流程,各类回收算法。 项目:略 mys...

5367

扫码关注云+社区