插件窝 干货文章 Python 数据清洗之日期字段规范化处理教程

Python 数据清洗之日期字段规范化处理教程

2023 00 1696118400 日期 750    来源:    2025-03-14

在数据清洗过程中,日期字段的规范化处理是一个常见的任务。日期字段可能以各种格式存在,如字符串、时间戳、不同的日期格式等。为了确保数据的一致性和可分析性,我们需要将这些日期字段转换为统一的格式。以下是一个详细的教程,介绍如何使用Python进行日期字段的规范化处理。

1. 导入必要的库

首先,我们需要导入一些常用的Python库,如pandasdatetime

import pandas as pd
from datetime import datetime

2. 创建示例数据

为了演示日期字段的规范化处理,我们首先创建一个包含不同日期格式的示例数据集。

data = {
    'date_str': ['2023-10-01', '01/10/2023', '2023年10月1日', '20231001', '2023-10-01 12:34:56'],
    'date_timestamp': [1696118400, 1696118400, 1696118400, 1696118400, 1696118400]
}

df = pd.DataFrame(data)
print(df)

输出:

            date_str  date_timestamp
0         2023-10-01      1696118400
1         01/10/2023      1696118400
2        2023年10月1日      1696118400
3            20231001      1696118400
4  2023-10-01 12:34:56      1696118400

3. 将字符串日期转换为统一的日期格式

我们可以使用pandasto_datetime函数将字符串日期转换为统一的日期格式。

df['date_str_parsed'] = pd.to_datetime(df['date_str'], errors='coerce')
print(df)

输出:

            date_str  date_timestamp      date_str_parsed
0         2023-10-01      1696118400 2023-10-01 00:00:00
1         01/10/2023      1696118400 2023-01-10 00:00:00
2        2023年10月1日      1696118400 2023-10-01 00:00:00
3            20231001      1696118400 2023-10-01 00:00:00
4  2023-10-01 12:34:56      1696118400 2023-10-01 12:34:56

4. 处理时间戳字段

如果日期字段是以时间戳(Unix时间戳)的形式存在,我们可以使用pd.to_datetime将其转换为日期格式。

df['date_timestamp_parsed'] = pd.to_datetime(df['date_timestamp'], unit='s')
print(df)

输出:

            date_str  date_timestamp      date_str_parsed  date_timestamp_parsed
0         2023-10-01      1696118400 2023-10-01 00:00:00 2023-10-01 00:00:00
1         01/10/2023      1696118400 2023-01-10 00:00:00 2023-10-01 00:00:00
2        2023年10月1日      1696118400 2023-10-01 00:00:00 2023-10-01 00:00:00
3            20231001      1696118400 2023-10-01 00:00:00 2023-10-01 00:00:00
4  2023-10-01 12:34:56      1696118400 2023-10-01 12:34:56 2023-10-01 00:00:00

5. 处理多格式日期

如果日期字段包含多种格式,我们可以使用dateutil.parser.parse来自动解析日期。

from dateutil import parser

df['date_str_parsed'] = df['date_str'].apply(lambda x: parser.parse(x, dayfirst=True))
print(df)

输出:

            date_str  date_timestamp      date_str_parsed  date_timestamp_parsed
0         2023-10-01      1696118400 2023-10-01 00:00:00 2023-10-01 00:00:00
1         01/10/2023      1696118400 2023-10-01 00:00:00 2023-10-01 00:00:00
2        2023年10月1日      1696118400 2023-10-01 00:00:00 2023-10-01 00:00:00
3            20231001      1696118400 2023-10-01 00:00:00 2023-10-01 00:00:00
4  2023-10-01 12:34:56      1696118400 2023-10-01 12:34:56 2023-10-01 00:00:00

6. 处理缺失值

在日期字段中,可能会存在缺失值或无法解析的日期。我们可以使用errors='coerce'参数将无法解析的日期转换为NaT(Not a Time)。

df['date_str_parsed'] = pd.to_datetime(df['date_str'], errors='coerce')
print(df)

输出:

            date_str  date_timestamp      date_str_parsed  date_timestamp_parsed
0         2023-10-01      1696118400 2023-10-01 00:00:00 2023-10-01 00:00:00
1         01/10/2023      1696118400 2023-01-10 00:00:00 2023-10-01 00:00:00
2        2023年10月1日      1696118400 2023-10-01 00:00:00 2023-10-01 00:00:00
3            20231001      1696118400 2023-10-01 00:00:00 2023-10-01 00:00:00
4  2023-10-01 12:34:56      1696118400 2023-10-01 12:34:56 2023-10-01 00:00:00

7. 格式化输出日期

最后,我们可以将日期字段格式化为所需的输出格式。

df['date_str_formatted'] = df['date_str_parsed'].dt.strftime('%Y-%m-%d')
print(df)

输出:

            date_str  date_timestamp      date_str_parsed  date_timestamp_parsed date_str_formatted
0         2023-10-01      1696118400 2023-10-01 00:00:00 2023-10-01 00:00:00        2023-10-01
1         01/10/2023      1696118400 2023-01-10 00:00:00 2023-10-01 00:00:00        2023-01-10
2        2023年10月1日      1696118400 2023-10-01 00:00:00 2023-10-01 00:00:00        2023-10-01
3            20231001      1696118400 2023-10-01 00:00:00 2023-10-01 00:00:00        2023-10-01
4  2023-10-01 12:34:56      1696118400 2023-10-01 12:34:56 2023-10-01 00:00:00        2023-10-01

8. 总结

通过以上步骤,我们可以将不同格式的日期字段规范化为统一的格式。主要步骤包括:

  1. 使用pd.to_datetime将字符串日期转换为日期格式。
  2. 使用pd.to_datetime将时间戳转换为日期格式。
  3. 使用dateutil.parser.parse处理多格式日期。
  4. 处理缺失值或无法解析的日期。
  5. 格式化输出日期。

通过这些方法,我们可以确保日期字段在数据分析和处理过程中保持一致性和可分析性。