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

相关文章

来自专栏java达人

Java开发者编写SQL语句时常见的10种错误

Java开发者对于面向对象编程思维与命令行编程思维的协调程度,取决于他们如下几种能力的水平: 1. 技巧(任何人都可以编写命令行形式的代码) 2. 教条(有的...

2135
来自专栏虚拟化云计算

定制虚拟机smbios信息

在某些需要给机器做认证和加密的场景下,会需要读取机器的厂家和主板等信息,这些信息都存放在SMBIOS信息中。在虚拟化场景下可以定制虚拟机的SMBIOS信息。

903
来自专栏数据库

MySQL数据库性能优化之三

索引为什么能提高数据访问性能很多人只知道索引能够提高数据库的性能,但并不是特别了解其原理,其实我们可以用一个生活中的示例来理解。 我们让一位不太懂计算机的朋友去...

1886
来自专栏施炯的IoT开发专栏

《101 Windows Phone 7 Apps》读书笔记-BABY NAME ELIMINATOR

课程内容 Ø本地数据库 Ø在应用程序中处理数据     Baby Name Eliminator是一种通过输入性格特征而获取婴儿名字的应用程序(我和我的妻...

1746
来自专栏Java工程师日常干货

从程序员的角度深入理解MySQL前言数据库基本原理探索MySQL索引背后的原理SQL优化神器:explain

作为一名工作了4年的程序猿,今天我将站在程序员的角度以MySQL为例探索数据库的奥秘!

603
来自专栏北京马哥教育

十个提升生产力的 bash 技巧

我喜欢钻研bash环境。很多时候,在使用bash编程中,有些问题一遍又一遍的重复遇到。每次我都需要重新思考这些问题的解决方法。直到有一天我无法忍受,于是坐下来,...

2556
来自专栏数据和云

如何编写更好的SQL查询:终极指南(上)

结构化查询语言(SQL)是数据挖掘分析行业不可或缺的一项技能,总的来说,学习这个技能是比较容易的。对于SQL来说,编写查询语句只是第一步,确保查询语句高效并且适...

2726
来自专栏杨建荣的学习笔记

由一条sql语句导致的系统IO问题(r3笔记第31天)

早上来到公司,照例进行了简单的检查,发现系统负载不高,就开始计划一些sql tuning的工作,但是过了一会,在通过shell命令查找一些sql信息的时候,发现...

3136
来自专栏c#开发者

Asp.net webform scaffolding结合Generic Unit of Work & (Extensible) Repositories Framework代码生成向导

Asp.net webform scaffolding结合Generic Unit of Work & (Extensible) Repositories Fr...

2705
来自专栏数据和云

Delphi 程序错误写法造成Oracle数据库负载异常

作者介绍 ? 张洪涛 富士康 DBA 注意:本文涉及的问题在9i的环境中测试的,经验证,同样适用于11g. 在用Toad的SGA Trace工具监控我们的Or...

2756

扫码关注云+社区