插件窝 干货文章 Python 数据清洗之邮编字段规范化教程

Python 数据清洗之邮编字段规范化教程

数据 邮编 12345 zipcode 189    来源:    2025-03-13

在数据清洗过程中,邮编字段的规范化是一个常见的任务。邮编的格式因国家或地区而异,因此在进行数据清洗时,需要根据具体的需求来处理。以下是一个使用Python进行邮编字段规范化的教程,假设我们处理的是美国的邮编(ZIP Code)。

1. 导入必要的库

首先,我们需要导入一些常用的数据处理库,如 pandasre(正则表达式库)。

import pandas as pd
import re

2. 创建示例数据

为了演示,我们创建一个包含邮编的示例数据集。

data = {
    'id': [1, 2, 3, 4, 5],
    'zipcode': ['12345', '12345-6789', '1234', '123456789', '12345-678']
}

df = pd.DataFrame(data)
print("原始数据:")
print(df)

输出:

原始数据:
   id      zipcode
0   1        12345
1   2   12345-6789
2   3         1234
3   4    123456789
4   5     12345-678

3. 定义规范化函数

我们需要定义一个函数来规范化邮编字段。对于美国的邮编,通常有两种格式: - 5位数字(如 12345) - 5位数字 + 4位数字(如 12345-6789

我们可以使用正则表达式来匹配和规范化这些格式。

def normalize_zipcode(zipcode):
    # 匹配5位数字或5位数字+4位数字的格式
    match = re.match(r'^(\d{5})(-\d{4})?$', zipcode)
    if match:
        # 如果有4位数字部分,则返回完整的9位邮编
        if match.group(2):
            return match.group(1) + match.group(2)
        # 否则返回5位邮编
        else:
            return match.group(1)
    else:
        # 如果不符合格式,返回NaN或空字符串
        return None

4. 应用规范化函数

将定义的函数应用到数据集的 zipcode 列上。

df['normalized_zipcode'] = df['zipcode'].apply(normalize_zipcode)
print("规范化后的数据:")
print(df)

输出:

规范化后的数据:
   id      zipcode normalized_zipcode
0   1        12345              12345
1   2   12345-6789         12345-6789
2   3         1234               None
3   4    123456789               None
4   5     12345-678               None

5. 处理无效邮编

在上面的输出中,我们可以看到一些无效的邮编被标记为 None。我们可以选择删除这些行,或者用默认值替换它们。

# 删除无效邮编的行
df_cleaned = df.dropna(subset=['normalized_zipcode'])
print("清洗后的数据:")
print(df_cleaned)

输出:

清洗后的数据:
   id      zipcode normalized_zipcode
0   1        12345              12345
1   2   12345-6789         12345-6789

6. 保存清洗后的数据

最后,我们可以将清洗后的数据保存到新的CSV文件中。

df_cleaned.to_csv('cleaned_zipcodes.csv', index=False)

总结

通过以上步骤,我们成功地对邮编字段进行了规范化处理。你可以根据具体的需求调整正则表达式和规范化逻辑,以适应不同国家或地区的邮编格式。数据清洗是数据预处理的重要步骤,确保数据的质量和一致性对于后续的分析和建模至关重要。