python清理数据 您所在的位置:网站首页 python数据清洗方法 python清理数据

python清理数据

#python清理数据| 来源: 网络整理| 查看: 265

作者|June Tao Ching编译|VK来源|Towards Data Science原文链接:https://towardsdatascience.com/simple-guide-to-data-cleaning-with-python-39203a14afeb

数据清理是任何项目中最关键的一步,如果处理不当,可能会得出完全不同的结论。通常,在大多数项目中,我们可能会花费一半的时间来清理数据。

在本文中,我将分享一些Python函数,它们可以帮助我们进行数据清理,特别是在以下方面:

删除未使用的列 删除重复项 数据映射 处理空数据 入门

我们将在这个项目中使用pandas,让我们安装包。

conda install pandas

我已经修改了著名的泰坦尼克号数据集,你可以在这里下载数据集:

https://github.com/chingjunetao/medium-article/blob/master/simple-guide-to-data-cleaning/modified_titanic_data.csv

让我们导入包并读取数据集。

import pandas as pd df = pd.read_csv("modified_titanic_data.csv") df.head()

**df.head()**将显示数据帧的前5行,使用此函数可以快速浏览数据集。

删除未使用的列

根据样本,有一个无效/空的Unnamed:13列我们不需要。我们可以使用下面的函数删除它。

# df = df.drop(columns="Unnamed: 13") # or df.drop(columns="Unnamed: 13", inplace = True) df.head()

如果要删除多个列,则需要一个数组来传入columns参数。

inplace=True将直接对数据帧本身执行操作,默认情况下,它将创建另一个副本,你必须再次将其分配给数据帧,如df = df.drop(columns="Unnamed: 13")。

删除重复项

让我们使用此函数检查此数据集中的重复项。

df[df.duplicated(keep=False)]

keep允许一些参数检查重复项。

first:除第一次出现外,将重复项标记为True。 last:将重复项标记为True,但最后一次出现的情况除外。 False:将所有副本标记为True。

在本例中,我希望显示所有的重复项,因此传递False作为参数。现在我们已经看到这个数据集中存在重复项,我想删除它们并保留第一个出现项。下面的函数用于保留第一个引用。

df = df.drop_duplicates(keep="first")

我们可以使用len(df)或df[df.duplicated(keep=False)]检查是否删除了重复项。如果删除了重复项,df[df.duplicated(keep=False)]将返回null。

数据映射# 在列gender中显示可用值 df["Sex"].unique() df["Sex"].hist() df["Sex"] = df["Sex"].map({ "male": "male", "m": "male", "m ": "male", "M": "male", "F": "female", "f": "female", "female": "female" }) df["Sex"].unique()

在df["Sex"].unique和df["Sex"].hist()的帮助下,我们发现此列中还存在其他值,如m,M,f和F。这可能是由于来自数据源的错误输入造成的,我们必须假设这些值是正确的,并映射到男性或女性。

df["Sex"] = df["Sex"].map({ "male": "male", "m": "male", "m ": "male", "M": "male", "F": "female", "f": "female", "female": "female" })

上面的函数用于将这些值映射到男性或女性。

注意:请确保映射中包含默认值male和female,否则在执行映射后它将变为nan。 处理空数据

此列中缺少3个值:-、na和NaN。pandas不承认-和na为空。在处理它们之前,我们必须用null替换它们。

import numpy as np df['Age'] = df['Age'].replace('-', np.NaN) df['Age'] = df['Age'].replace('na', np.NaN) df["Age"].head(10) ######################## ##### Option 2 ##### missing_values = ["na", "-"] df2 = pd.read_csv("modified_titanic_data.csv", na_values = missing_values) df2["Age"].head(10)

replace()将-,na替换为null。

如果我们在读取数据时发现了这个问题,我们实际上可以通过将缺失值传递给na_values参数来处理这个缺失值。结果是一样的。

现在我们已经用空值替换了它们,我们将如何处理那些缺失值呢?

解决方案1:删除样本(行)/特征(列)

如果我们确信丢失的数据是无用的,或者丢失的数据只是数据的一小部分,那么我们可以删除包含丢失值的行。

在统计学中,这种方法称为删除,它是一种处理缺失数据的方法。在该方法中,如果缺少任何单个值,则整个记录将从分析中排除。

如果我们确信这个特征(列)不能提供有用的信息或者缺少值的百分比很高,我们可以删除整个列。这在进行统计分析时非常有用,因为填充缺失值可能会产生意外或有偏差的结果。

解决方案2:插补缺失值

它意味着根据其他数据计算缺失值。例如,我们可以计算年龄和出生日期的缺失值。

在这种情况下,我们没有出生日期,可以用数据的平均值或中位数替换缺失值。

注:平均值在数据不倾斜时最有用,而中位数更稳健,对异常值不敏感,因此在数据倾斜时使用。

在这种情况下,让我们使用中位数来替换缺少的值。

df["Age"].median用于计算数据的中位数,而fillna用于中位数替换缺失值。

现在你已经学会了如何用pandas清理Python中的数据。希望这篇文章对你有用。

可以在我的Github中查看完整的Jupyter笔记本: https://github.com/chingjunetao/medium-article/blob/master/simple-guide-to-data-cleaning/data-cleaning.ipynb



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有