零基础学编程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 条评论
登录 后参与评论

相关文章

来自专栏玉树芝兰

Python编程遇问题,文科生怎么办?

敲黑板了啊,答疑时间到。如果你没有良好的Python编程基础,在尝试应用数据科学方法时遇到了问题和困难,又不知道该如何有效解决,那么这篇文章就是为你写的。请务必...

542
来自专栏程序员互动联盟

【编程基础】谈谈C++语言--磨刀霍霍

看到上篇讲的《C++语言软件和编程》引发了大家的热议,小编很是激动。有人评论说C++是我们程序猿在虚拟世界的恋人,小编还真是暗暗欣喜了一下下--理解万岁!在此声...

34812
来自专栏嵌入式程序猿

你应该学会的串口仿真

新年伊始,万象更新,在新的一年里,有没有给自己的嵌入式开发之路做一个很好的规划呢?开工第一天,就让自己动手学起来吧,小猿带你一步一步成长为一名合格的嵌入式开发人...

3087
来自专栏北京马哥教育

运维总监不会告诉你这些有趣但鲜为人知的 Linux 命令

在这篇文章中和 Carla Schroder 一起探索 Linux 中的一些鲜为人知的强大工具。 本文是一篇关于一些有趣但鲜为人知的工具 termsaver、p...

3576
来自专栏Python爬虫与算法进阶

大佬,我代码哪错了?

问题无处不在 我: “大佬,帮我看看这个问题错在哪了?” 大佬: “你的代码呢、你的错误提示呢?” 我: “好的,我发给你” 大佬: “。。。 再见” 留下一脸...

3278
来自专栏Crossin的编程教室

【Python 第4课】输入

Hi~Crossin又来了。 可以用编程语言让计算机按你说的指令做事情之后,大家是不是有些跃跃欲试呢?别着急,先回顾一下我们之前几节课。我们到现在一共提到了三种...

2797
来自专栏霍丙乾的专栏

Kotlin Native 详细体验,你想要的都在这儿

本文通过 gradle 以及 makefile 两种方式对 Kotlin Native 项目进行构建,提供了详细的从 C 源码编译、到 Kotlin Nativ...

3.2K3
来自专栏编程

那些有趣的 Linux 命令

英文:mylinuxbook,译文:快乐的骚年, www.cnblogs.com/sukai/archive/2013/06/08/3127031.html 1...

18110
来自专栏Crossin的编程教室

判断字符编码

今天本来打算讲点新课的,后来有些事耽搁,也没时间准备了,就分享一个小工具吧: python里面的字符编码是让人头大的一个东西,甚至很多时候你都不知道现在拿到的文...

2975
来自专栏Crossin的编程教室

【Python 第2课】print

今天早上醒来,发现咱们的同学人数一夜之间多了50,后来又陆陆续续来了很多,于是我坚持下去的信心又增加了不少。在这里感谢连客官微的宣传,表示今晚将用加班写代码来表...

2607

扫描关注云+社区