摘要:欢迎来到如何使用 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')
这方面涉及类别和数值数据。类别数据应该具有相同的格式样式,例如小写。为了将所有类别数据格式化为小写,我们可以使用以下语句:
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
在本教程中,我讲述如何使用 Python Pandas 进行数据格式化。建议采取以下三个步骤:
希望这篇文章对您有用。如果您想了解数据预处理的其他方面,如数据标准化和数据规范化,请持续关注我......
示例数据获取方式:关注我,在公众号聊天窗口回复关键字“tweets”即可免费获取。赶快跟着教程一起学习起来吧!恭喜您,今天又进步了一点👏👏👏。


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