前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python数据处理 tips

python数据处理 tips

作者头像
磐创AI
发布2021-04-21 10:40:32
4.3K0
发布2021-04-21 10:40:32
举报

磐创AI分享

作者 | June Tao Ching 编译 | VK 来源 | Towards Data Science

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

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

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

入门

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

代码语言:javascript
复制
conda install pandas

我已经修改了著名的泰坦尼克号数据集从Kaggle演示的目的,你可以在这里下载数据集:https://github.com/chingjunetao/medium-article/blob/master/simple-guide-to-data-cleaning/modified_titanic_data.csv

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

代码语言:javascript
复制
import pandas as pd

df = pd.read_csv("modified_titanic_data.csv")
df.head()

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

删除未使用的列

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

代码语言:javascript
复制
# df = df.drop(columns="Unnamed: 13")
# or 
df.drop(columns="Unnamed: 13", inplace = True)
df.head()

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

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

删除重复项

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

代码语言:javascript
复制
df[df.duplicated(keep=False)]

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

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

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

代码语言:javascript
复制
df = df.drop_duplicates(keep="first")

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

数据映射

代码语言:javascript
复制
# 在列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。这可能是由于来自数据源的错误输入造成的,我们必须假设这些值是正确的,并映射到男性或女性。

代码语言:javascript
复制
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替换它们。

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 磐创AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 磐创AI分享
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档