标题 | 详情 |
---|---|
作者简介 | 愚公搬代码 |
头衔 | 华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。 |
近期荣誉 | 2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳博主等。 |
博客内容 | .NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。 |
欢迎 | 👍点赞、✍评论、⭐收藏 |
文章目录
🚀前言
在数据分析和处理的过程中,日期数据往往扮演着至关重要的角色。无论是时间序列分析、数据可视化,还是机器学习模型的构建,正确处理日期数据都是确保分析结果准确性的基础。在Python的Pandas库中,DataFrame提供了强大的工具和方法,使得日期数据的处理变得高效而便捷。
本篇文章将深入探讨如何在DataFrame中处理日期数据,包括日期的解析、格式化、时间戳的转换、日期范围的生成以及缺失数据的处理等关键技巧。我们将通过实例演示每个操作的具体应用,帮助你深入理解如何利用Pandas轻松应对各种日期处理需求。
🚀一、DataFrame日期数据处理
🔎1.📅 Pandas日期数据处理:to_datetime方法详解
🦋1.1 日期格式统一的重要性
- 常见问题:同一日期存在多种表达格式
- 解决方案:
pandas.to_datetime()
方法可实现批量日期格式转换
常见日期格式示例
🦋1.2 to_datetime核心功能
方法语法
pandas.to_datetime(
arg,
errors='ignore',
dayfirst=False,
yearfirst=False,
utc=None,
box=True,
format=None,
exact=True,
unit=None,
infer_datetime_format=False,
origin='unix',
cache=False
)
参数详解
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
arg |
多种 | - | 输入数据(字符串、数组、Series) |
errors |
str | ‘ignore’ | 错误处理策略: - ignore :保留原值- raise :抛出异常- coerce :转为NaT |
dayfirst |
bool | False | 优先解析日为第一位(如20/01/2020 →2020-01-20) |
yearfirst |
bool | False | 优先解析年为第一位(如10/11/12 →2010-11-12) |
format |
str | None | 自定义格式字符串(如%Y-%m-%d ) |
unit |
str | None | 时间单位(D/s/ms/us/ns),用于解析时间戳 |
infer_datetime_format |
bool | False | 自动推断日期格式 |
🦋1.3 典型应用场景
☀️1.3.1 场景1:单列格式转换
import pandas as pd
#解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width', True)
df=pd.DataFrame({
'原日期':['14-Feb-20', '02/14/2020', '2020.02.14', '2020/02/14','20200214']})
df['转换后的日期']=pd.to_datetime(df['原日期'])
print(df)
输出结果:
☀️1.3.2 多列组合日期
import pandas as pd
#解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width', True)
df = pd.DataFrame({
'year': [2018, 2019,2020],
'month': [1, 3,2],
'day': [4, 5,14],
'hour':[13,8,2],
'minute':[23,12,14],
'second':[2,4,0]})
df['组合后的日期']=pd.to_datetime(df)
print(df)
输出结果:
🦋1.4 高级使用技巧
☀️1.4.1 处理异常数据
# 包含非法日期的数据转换
mixed_dates = ['2023-02-30', 'invalid_date', '202