Advertisement

详解Python利用Pandas和 NumPy 库来进行数据清洗

阅读量:

文章目录

  • 前言
  • 准备工作
  • 移除DataFrame中的某一列
  • 修改DataFrame的索引设置
  • 整理DataFrame的数据字段
  • 通过结合str方法和NumPy库清理数据列
  • 利用apply函数对整个数据集进行清洗处理
  • 删除DataFrame中指定的行数据
  • 给DataFrame列重新命名
    • 关于Python技术储备
      • 一、系统学习Python各类知识点的学习路线规划
    • 学习Python基础视频课程推荐列表
    • 精选Python学习书籍汇总
    • 集成Python工具包及项目源码合集的学习路径规划
    • Python工具包详细解析及应用实践指导(分三部分)
    • Python实战案例分析与进阶技巧精讲(分三部分)
    • Python小游戏开发与优化实现指南(分三部分)
    • 面试中常考Python知识点总结及应对策略指导(分三部分)
    • Python兼职渠道选择及操作流程详解(分三部分)

前言

大多数数据科学家普遍认为,在工作中头 80%,即黄金比例的时间被用于收集与整理数据——这一阶段耗时巨大,并且通过建立标准化处理流程使收集到的数据得以系统化地应用。

对于那些刚进入这一领域的研究者或从业者而言,在面对海量杂乱数据时展现出良好的数据整理能力至关重要。关键在于能够有效地对存在缺失项、不统一的数据格式以及不符合规范的数据条目进行分类和归档,并且还需要具备识别并剔除冗余或无关的信息的能力。

将利用 Python 的 Pandas和 NumPy 库来清理数据。


在这里插入图片描述

准备工作

导入模块后就开始正式的数据预处理吧。

复制代码
    import pandas as pd
    import numpy as np

DataFrame 列的删除

在数据集中通常会发现,并非所有类别都具有实用性。例如,在一个包含学生信息(如:姓名、年级、标准测试分数以及父母的姓名和地址)的数据集中,默认情况下可能会关注于分析学生成绩表现这一目标。在这种特定的研究方向下,则学生的地址或父母的姓名并不重要因素;因此,在这种情况下,则需要考虑的是如何有效地排除或忽略那些与当前研究主题无关的信息字段;因为如果需要保留这些不需要的数据,则可能导致不必要的空间占用和存储开销增加的问题出现。

BL-Flickr-Images-Book.csv 数据操作。

复制代码
    df = pd.read\_csv('数据科学必备Pandas、NumPy进行数据清洗/BL-Flickr-Images-Book.csv')
    df.head()

发现这些列缺乏关于Edition Statement, Corporate Author, Corporate Contributors, Former owner, Engraver, Issuance type和Shelfmarks的具体信息,并且对于这些字段没有任何参考价值。因此建议执行批量删除操作。

复制代码
    to\_drop\_column = \[ 'Edition Statement',
                   'Corporate Author',
                   'Corporate Contributors',
                   'Former owner',
                   'Engraver',
                   'Contributors',
                   'Issuance type',
                   'Shelfmarks'\]
    
    df.drop(to\_drop\_column , inplace=True, axis=1)
    df.head()

DataFrame 索引更改

Pandas 的索引增强了 NumPy 数组的能力,并支持更为通用的切片和标记操作。 常见情况下,在数据中使用唯一值作为字段索引是有助于提高效率的。

获取唯一标识符。

复制代码
    df\['Identifier'\].is\_unique
    True

Identifier列替换索引列。

复制代码
    df = df.set\_index('Identifier')
    df.head()

206 是索引的第一个标签,可以使用 df.iloc[0] 基于位置的索引访问。

DataFrame 数据字段整理

清除特定的字段,并对其进行标准化处理。这样做的目的是为了更清晰地解析数据集,并确保数据的一致性。

处理 Date of Publication 出版日期 列,发现该数据列格式并不统一。

df.loc[1905:, ‘Date of Publication’].head(10)

复制代码
    Identifier
    1905           1888
    1929    1839, 38-54
    2836           1897
    2854           1865
    2956        1860-63
    2957           1873
    3017           1866
    3131           1899
    4598           1814
    4884           1820
    Name: Date of Publication, dtype: object

我们可以使用正则表达式的方式直接提取连续的4个数字即可。

复制代码
    extr = df\['Date of Publication'\].str.extract(r'^(\ d{4})', expand=False)
    extr.head()
    
    Identifier
    206    1879
    216    1868
    218    1869
    472    1851
    480    1857
    Name: Date of Publication, dtype: object

最后获取数字字段列。

复制代码
    df\['Date of Publication'\] = pd.to\_numeric(extr)

str 方法与 NumPy 结合清理列

df[‘Date of Publication’].str 具有快速字符串操作功能的方法,在 Pandas 中实现了类似 Python 字符串或编译正则表达式的功能。这些操作主要模仿了如 .split()、.replace() 和 .capitalize().

为了清除 Place of Publication 字段, 我们可以通过集成 Pandas 中的 str 方法与 NumPy 中的 np.where 函数来实现这一目标, 因为 np.where 实际上相当于 Excel 中的 IF() 宏在矢量化操作中的功能.

复制代码
    np.where(condition, then, else)

在这一场景中, condition 要么类似于一个数组对象, 要么类似于一个布尔掩码。 then 是指当条件评估为True时所使用的值, 否则则是要使用的值。

本质上where()方法获取满足特定条件下对象的所有元素,并对这些对象进行相应的判断运算:即检查每个对象在满足条件下相应的计算结果是否为True;然后根据判断的结果返回一个由then或else组成的ndarray。可以在复合if-then语句中嵌入此操作,并使程序能够根据不同情况灵活处理多个不同的输入参数和逻辑关系。

处理 Place of Publication 出版地 数据。

复制代码
    df\['Place of Publication'\].head(10)
    
    Identifier
    206                                  London
    216                London; Virtue & Yorston
    218                                  London
    472                                  London
    480                                  London
    481                                  London
    519                                  London
    667     pp. 40. G. Bryan & Co: Oxford, 1898
    874                                 London\]
    1143                                 London
    Name: Place of Publication, dtype: object

使用包含的方式提取需要的数据信息。

复制代码
    pub = df\['Place of Publication'\]
    london = pub.str.contains('London')
    london\[:5\]
    
    Identifier
    206    True
    216    True
    218    True
    472    True
    480    True
    Name: Place of Publication, dtype: bool

也可以使用 np.where 处理。

复制代码
    df\['Place of Publication'\] = np.where(london, 'London',
                                      pub.str.replace('-', ' ')))
    
    Identifier
    206                     London
    216                     London
    218                     London
    472                     London
    480                     London
                  ...         
    4158088                 London
    4158128                  Derby
    4159563                 London
    4159587    Newcastle upon Tyne
    4160339                 London
    Name: Place of Publication, Length: 8287, dtype: object

apply 函数清理整个数据集

在特定条件下,在某些情况下会将自定义函数应用到 DataFrame 的每个单元格或元素上,并通过 Pandas 的 apply() 方法实现这一功能

例如将数据的发布日期进行处理成 xxxx 年的格式,就可以使用apply。

复制代码
    def clean\_date(text):
    try:
        return str(int(text)) + "年"
    except:
        return text
    
    df\["new\_date"\] = df\["Date of Publication"\].apply(clean\_date)
    df\["new\_date"\] 
    
    Identifier
    206        1879年
    216        1868年
    218        1869年
    472        1851年
    480        1857年
           ...  
    4158088    1838年
    4158128    1831年
    4159563      NaN
    4159587    1834年
    4160339    1834年
    Name: new\_date, Length: 8287, dtype: object

DataFrame 跳过行

复制代码
    olympics\_df = pd.read\_csv('数据科学必备Pandas、NumPy进行数据清洗/olympics.csv')
    olympics\_df.head()

可以在读取数据时候添加参数跳过某些不要的行,比如索引 0 行。

复制代码
    olympics\_df = pd.read\_csv('数据科学必备Pandas、NumPy进行数据清洗/olympics.csv',header=1)
    olympics\_df.head()

DataFrame 重命名列

复制代码
    new\_names =  {'Unnamed: 0': 'Country',
              '? Summer': 'Summer Olympics',
               '01 !': 'Gold',
              '02 !': 'Silver',
              '03 !': 'Bronze',
              '? Winter': 'Winter Olympics',
              '01 !.1': 'Gold.1',
              '02 !.1': 'Silver.1',
              '03 !.1': 'Bronze.1',
              '? Games': '# Games',
              '01 !.2': 'Gold.2',
              '02 !.2': 'Silver.2',
              '03 !.2': 'Bronze.2'}
    
    olympics\_df.rename(columns=new\_names, inplace=True)
    
    olympics\_df.head()

关于Python技术储备

学好Python不管是从事哪种职业或是副业都能带来不错的收入。虽然学会Python需要制定详细的阶段性学习计划。最后分享了一份完整的Python学习资料包。为那些希望提升自己编程能力的朋友们提供了一些实用的学习资源

👉大礼包:《Python入门资料&实战源码&安装工具】免费领取安全链接,放心点击

一、Python所有方向的学习路线

该系统性地对Python各个方向的技术要点进行归纳整理,并构建了各个领域相关知识点的系统汇总。这一做法的主要优势在于通过这些知识点你可以更方便地寻找相应的学习资源,从而确保自己能够全面掌握相关知识。

在这里插入图片描述
二、Python基础学习视频

② 路线对应学习视频

丰富且适于初学者学习的基础视频课程也非常充足。有了这些课程后,学习Python变得轻鬆易懂~插入图片的位置通常在内容下方或旁边

在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!

在这里插入图片描述

因篇幅有限,仅展示部分资料

三、精品Python学习书籍

当我在掌握了一定的基础知识并具备了独立思考能力之后

在这里插入图片描述
四、Python工具包+项目源码合集
①Python工具包

你可以在此找到所有常用Python开发工具。每一个都配有完整的安装指南,并确保你能够顺利地完成安装过程。

你可以在此找到所有常用Python开发工具。每一个都配有完整的安装指南,并确保你能够顺利地完成安装过程。

在这里插入图片描述
②Python实战案例

光学理论的应用价值较低,在编程实践中需掌握实践操作技能。只有通过亲自动手实践才能真正掌握所学知识。建议通过参与实战项目提升自己的技术能力,并结合丰富的实战案例进行深入学习。平台提供了超过100个实战案例源码供您参考和使用。

在这里插入图片描述
③Python小游戏源码

如果觉得上面的实战案例有些无聊呢?不妨试着用Python开发小游戏来丰富学习体验。

在这里插入图片描述
五、面试资料

学习Python的目的自然是寻求高薪机会;这些试题出自阿里、腾讯、字节等知名互联网企业的最新考题;并附有来自阿里的权威解析;通读这套试题后,相信每一位读者都能够获得理想的求职机会。

在这里插入图片描述
在这里插入图片描述
六、Python兼职渠道

而且学会Python以后,在多个各大兼职平台上承接工作任务并获得经济回报。为了更好地帮助自己积累经验,在各类兼职渠道的具体信息、注意事项以及与客户的沟通技巧上我都做出了系统性的整理,并制作成了电子版材料

在这里插入图片描述
在这里插入图片描述

保证100%免费

保证100%免费

绝对免费提供给所有用户

绝对免费提供给所有用户

绝对免费提供给所有用户

全部评论 (0)

还没有任何评论哟~