前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >零基础学编程034:解决一个pandas问题

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

作者头像
申龙斌
发布2018-03-06 10:55:11
1K0
发布2018-03-06 10:55:11
举报

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

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

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

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

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

第一步:安装pandas

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

代码语言:javascript
复制
python -m pip install pandas

第二步:读入csv文件

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

代码语言:javascript
复制
import pandas
df = pandas.read_csv('data.csv')

运行出错,错误信息:

代码语言:javascript
复制
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 吧,竟然直接通过!

代码语言:javascript
复制
df = pandas.read_csv('data.csv', encoding='iso-8859-1')

第三步:筛选数据

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

代码语言:javascript
复制
df2 = df[np.isfinite(df['RPROC_DMS_ID'])]

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

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

代码语言:javascript
复制
import numpy
df2 = df[numpy.isfinite(df['RPROC_DMS_ID'])]

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

代码语言:javascript
复制
print(len(df), len(df2))

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

小结:

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

最终代码:

代码语言:javascript
复制
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 ---

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 申龙斌的程序人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档