ITPub博客

首页 > 数据库 > 数据库开发技术 > Python Pandas数据预处理—Part 2:数据格式化

Python Pandas数据预处理—Part 2:数据格式化

原创 数据库开发技术 作者:jackzhang 时间:2023-11-25 18:35:18 0 删除 编辑

摘要:欢迎来到如何使用 Pandas 库进行数据预处理的教程系列的第二部分——数据格式化。预处理是对数据进行预分析的过程,目的是将数据转换为标准的规范化格式。

数据预处理包括以下几个方面:

  • 缺失值处理
  • 数据格式化
  • 数据规范化
  • 数据标准化
  • 数据分箱

在这一部分,我们主要关注数据格式化。前一个教程我们学习了缺失值处理(直通车:Python Pandas数据预处理—Part 1:缺失值处理)。

数据格式化是将数据转换为通用格式的过程,这有助于用户进行数据的比较。未格式化数据的示例如下:在同一列中引用具有不同值的同一实体,例如 New York 和 NY。

一、数据准备

在本教程中,我们将使用与 Twitter 相关的数据集,获取方式见文末。

首先,使用 pandas 库导入数据并将其转换为数据框架。通过 head(10) 方法,我们可以查看数据集的前10行:

import pandas as pd

df = pd.read_csv('datasets/tweets.csv')
df.head(10)

在本教程中,我们通过 dropna() 函数删除所有缺失值:

df.dropna(inplace=True)

二、纠正数据类型

首先,我们应该确保每一列都被分配给正确的数据类型。这可以通过属性 dtypes 进行检查:

df.dtypes

在本例中,我们可以使用 astype() 函数将 Tweet Location 列转换为字符串,如下所示:

df['Tweet Location'] = df['Tweet Location'].astype('string')

通过运行以下语句,可以将所有对象转换为字符串:

obj_columns = df.select_dtypes(include=object).columns.tolist()
df[obj_columns] = df[obj_columns].astype('string')

三、数据同构(Data Homogeneous)

这方面涉及类别和数值数据。类别数据应该具有相同的格式样式,例如小写。为了将所有类别数据格式化为小写,我们可以使用以下语句:

df['Tweet Content'] = df['Tweet Content'].str.lower()

其他对类别数据进行同构的技术包括以下几个方面:

  • 删除所有空白:df['Tweet Content'] = df['Tweet Content'].str.replace(‘ ‘, ‘’)
  • 删除字符串开头的空白:df['Tweet Content'] = df['Tweet Content'].str.lstrip()
  • 删除字符串末尾的空白:df['Tweet Content'] = df['Tweet Content']].str.rstrip()
  • 去掉两端的空白:df['Tweet Content'] = df['Tweet Content'].str.strip()

例如,数字数据在点之后应该有相同的位数。例如,如果我们需要保留小数点后2位,可以使用以下语句:df['User Following'] = df['User Following'].round(2)。

对数值数据进行同构的其他技术包括:

  • 向上四舍五入——单个数据框列—— df['User Following'] = df['User Following'].apply(np.ceil)。
  • 向下四舍五入——单个数据框列—— df['User Following'] = df['User Following'].apply(np.floor)。

四、相同概念具有不同的值

同样的概念可能会以不同的方式表示。例如,在我们的数据集中,列 Twitter Location 包含值 Columbus,OH 和 Columbus, OH 来描述相同的概念。我们可以使用 unique() 函数列出一列的所有唯一值:

df['Tweet Location'].unique()

为了处理相同概念用不同的值表示,我们应该分别处理每种类型的错误。例如,我们可以操作每个字符串 word,word,以便在逗号后面插入一个空格,并得到下面的输出 word, word。我们可以定义一个名为 set_pattern() 的函数,它在字符串中搜索特定的模式,然后在找到模式后在同一字符串中执行一些替换。在我们的例子中,我们搜索所有具有 word,word 结构的模式,然后将 , 替换为 , 。最后返回结果。

import re


def set_pattern(x):
    pattern = r'[(A-Z)]\w+,([A-Z])\w+'
    res = re.match(pattern, x)
    if res:
        x = x.replace(',', ', ')
    return x

现在我们可以将该函数应用于 Tweet Location 列中的每个值。这可以通过将函数 apply() 与运算符 lambda 结合使用来实现。我们可以指定 apply() 函数必须应用于每一行(通过参数 axis = 1),然后通过 lambda 运算符我们可以选择特定的行并将其应用于函数 set_pattern()。

df['Tweet Location'] = df.apply(lambda x: set_pattern(x['Tweet Location']), axis=1)
df

五、总结(Summary)

在本教程中,我讲述如何使用 Python Pandas 进行数据格式化。建议采取以下三个步骤:

  • 对数据使用正确的格式——当需要进一步分析时,例如统计分析,这是必要的。
  • 数据同构——这对于需要进一步分析的文本数据尤其有用,比如情感分析。
  • 使用单个值来表示相同的概念——这在需要进行数据分组时非常有用。

希望这篇文章对您有用。如果您想了解数据预处理的其他方面,如数据标准化和数据规范化,请持续关注我......

示例数据获取方式:关注我,在公众号聊天窗口回复关键字“tweets”即可免费获取。赶快跟着教程一起学习起来吧!恭喜您,今天又进步了一点👏👏👏。


往期推荐⬇️⬇️⬇️

Python Pandas数据预处理—Part 1:缺失值处理

7个实用示例让你轻松玩转SQL中的GROUP BY

关系数据库中的存储过程

掌握SQL:小项目—应用你的SQL技能

掌握SQL:高级主题—视图、存储过程和触发器

原文作者:数据派探险家;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2017-12-19

  • 博文量
    119
  • 访问量
    55955