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

时间:2022-05-03
本文章向大家介绍零基础学编程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 ---

随机文章