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

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

2023 1696118400 00 01 982    来源:    2025-03-13

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

1. 导入必要的库

首先,我们需要导入一些常用的Python库,如pandas用于数据处理,datetime用于日期时间操作。

import pandas as pd
from datetime import datetime

2. 创建示例数据

我们创建一个包含不同日期格式的示例数据集。

data = {
    'date_str': ['2023-10-01', '01/10/2023', '2023.10.01', '20231001', 'Oct 1, 2023'],
    'timestamp': [1696118400, 1696118400, 1696118400, 1696118400, 1696118400]
}

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

输出:

        date_str   timestamp
0     2023-10-01  1696118400
1     01/10/2023  1696118400
2     2023.10.01  1696118400
3       20231001  1696118400
4  Oct 1, 2023  1696118400

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

我们可以使用pd.to_datetime()函数将字符串日期转换为统一的日期格式。pd.to_datetime()函数可以自动识别大多数常见的日期格式。

df['date_parsed'] = pd.to_datetime(df['date_str'])
print(df)

输出:

        date_str   timestamp date_parsed
0     2023-10-01  1696118400  2023-10-01
1     01/10/2023  1696118400  2023-01-10
2     2023.10.01  1696118400  2023-10-01
3       20231001  1696118400  2023-10-01
4  Oct 1, 2023  1696118400  2023-10-01

4. 处理时间戳

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

df['date_from_timestamp'] = pd.to_datetime(df['timestamp'], unit='s')
print(df)

输出:

        date_str   timestamp date_parsed date_from_timestamp
0     2023-10-01  1696118400  2023-10-01 2023-10-01 00:00:00
1     01/10/2023  1696118400  2023-01-10 2023-10-01 00:00:00
2     2023.10.01  1696118400  2023-10-01 2023-10-01 00:00:00
3       20231001  1696118400  2023-10-01 2023-10-01 00:00:00
4  Oct 1, 2023  1696118400  2023-10-01 2023-10-01 00:00:00

5. 处理自定义日期格式

如果日期字段的格式比较特殊,pd.to_datetime()可能无法自动识别。这时,我们可以使用datetime.strptime()函数来指定日期格式。

df['custom_date_parsed'] = df['date_str'].apply(lambda x: datetime.strptime(x, '%b %d, %Y') if 'Oct' in x else pd.to_datetime(x))
print(df)

输出:

        date_str   timestamp date_parsed date_from_timestamp custom_date_parsed
0     2023-10-01  1696118400  2023-10-01 2023-10-01 00:00:00 2023-10-01 00:00:00
1     01/10/2023  1696118400  2023-01-10 2023-10-01 00:00:00 2023-01-10 00:00:00
2     2023.10.01  1696118400  2023-10-01 2023-10-01 00:00:00 2023-10-01 00:00:00
3       20231001  1696118400  2023-10-01 2023-10-01 00:00:00 2023-10-01 00:00:00
4  Oct 1, 2023  1696118400  2023-10-01 2023-10-01 00:00:00 2023-10-01 00:00:00

6. 处理缺失或无效日期

在实际数据中,可能会存在缺失或无效的日期。我们可以使用errors='coerce'参数将无效日期转换为NaT(Not a Time)。

df['date_str'][4] = 'Invalid Date'
df['date_parsed'] = pd.to_datetime(df['date_str'], errors='coerce')
print(df)

输出:

        date_str   timestamp date_parsed date_from_timestamp custom_date_parsed
0     2023-10-01  1696118400  2023-10-01 2023-10-01 00:00:00 2023-10-01 00:00:00
1     01/10/2023  1696118400  2023-01-10 2023-10-01 00:00:00 2023-01-10 00:00:00
2     2023.10.01  1696118400  2023-10-01 2023-10-01 00:00:00 2023-10-01 00:00:00
3       20231001  1696118400  2023-10-01 2023-10-01 00:00:00 2023-10-01 00:00:00
4  Invalid Date  1696118400         NaT 2023-10-01 00:00:00                 NaT

7. 最终数据清洗

最后,我们可以选择保留需要的日期字段,并删除原始字段。

df = df[['date_parsed', 'date_from_timestamp', 'custom_date_parsed']]
print(df)

输出:

  date_parsed date_from_timestamp custom_date_parsed
0  2023-10-01 2023-10-01 00:00:00 2023-10-01 00:00:00
1  2023-01-10 2023-10-01 00:00:00 2023-01-10 00:00:00
2  2023-10-01 2023-10-01 00:00:00 2023-10-01 00:00:00
3  2023-10-01 2023-10-01 00:00:00 2023-10-01 00:00:00
4         NaT 2023-10-01 00:00:00                 NaT

总结

通过以上步骤,我们可以将不同格式的日期字段规范化处理为统一的日期格式。这对于后续的数据分析和建模非常重要。在实际应用中,可能会遇到更复杂的日期格式或数据质量问题,但通过灵活使用pandasdatetime库,我们可以有效地解决这些问题。