数据大清洗_Pandas库进阶(Pandas时间数据)

目录

  • 一、pandas的时间数据
    • 1.Timestamp 时间类型
    • 2.Timedelta 时间类型

一、pandas的时间数据

在多数情况下,对时间类型数据进行分析的前提就是将原本为字符串的时间转换为标准
时间类型。

Pandas 继承了 NumPy 库和 datetime 库的时间相关模块,提供了 6 种时间相关的类。

数据大清洗_Pandas库进阶(Pandas时间数据)_第1张图片

1.Timestamp 时间类型

其中 Timestamp 作为时间类中最基础的,也是最为常用的。在多数情况下,时间相关的字符串都会转换成为 Timestamp。
pandas 提供了 to_datetime 函数,能够实现这一目标。

代码示例:

import pandas as pd
from pandas import DatetimeIndex

# pandas中默认支持的时间点类型: Timestamp
# pandas中默认支持的时间序列类型:DatetimeIndex
# numpy中的时间类型:datetime64[ns]

# 时间数据---关于时间的数据

# # '2020-6-15' ----字符串
# # 将字符串的时间点类型转化为 pandas支持的时间点
# res = pd.to_datetime('2020-6-15')
# print('res:\n', res)  # 2020-06-15 00:00:00
#
# print('res的类型:\n', type(res))  # 




# # ['2020-6-15','2020-6-16','2020-6-17','2020-6-18']
# # 多个时间点字符串组合起来的列表
# # 多个时间点组合起来的序列---时间序列
# res1 = pd.to_datetime(['2020-6-15', '2020-6-16', '2020-6-17', '2020-6-18'])
# print('res:\n', res1)

# res2 = DatetimeIndex(['2020-06-15', '2020-06-16', '2020-06-17', '2020-06-18'], dtype='datetime64[ns]', freq=None)
# print(res2)
# print('res的类型:\n', type(res2))
# #  

在多数涉及时间相关的数据处理,统计分析的过程中,需要提取时间中的年份,月份等数据。
就可以使用对应的 Timestamp 类属性就能够实现这一目的。
结合 Python 列表推导式,可以实现对 DataFrame 某一列时间信息数据的提取。

数据大清洗_Pandas库进阶(Pandas时间数据)_第2张图片
数据大清洗_Pandas库进阶(Pandas时间数据)_第3张图片


meal_order_detail.xlsx文件:
数据大清洗_Pandas库进阶(Pandas时间数据)_第4张图片


代码示例:

import pandas as pd

# # 加载数据
detail = pd.read_excel('./meal_order_detail.xlsx')
print('detail:\n', detail)
print('detail的列索引:\n', detail.columns)
print('*' * 100)
#
# # 获取 place_order_time
# # print(detail.loc[:, 'place_order_time'])
#
# # 先转化一下 ---转化为pandas默认支持的时间序列
# detail.loc[:, 'place_order_time'] = pd.to_datetime(detail.loc[:, 'place_order_time'])



# # 可以通过列表推导式来获取对应的时间属性
# # 获取年属性--->保存到原detail中
# detail.loc[:, 'year'] = [i.year for i in detail.loc[:, 'place_order_time']]
# print('year:\n', detail.loc[:, 'year'])
# print('*' * 100)


# # 获取月属性 --->保存到原detail中
# detail.loc[:, 'month'] = [i.month for i in detail.loc[:, 'place_order_time']]
# print('month:\n', detail.loc[:, 'month'])


# # 获取日属性 --->保存到原detail中
# detail.loc[:, 'day'] = [i.day for i in detail.loc[:, 'place_order_time']]


# # 还可以获取 时、分、秒
#
# # 获取week属性 ---一年中的第多少周
# detail.loc[:, 'week'] = [i.week for i in detail.loc[:, 'place_order_time']]


# # 获取quarter属性(季节)
# detail.loc[:, 'quarter'] = [i.quarter for i in detail.loc[:, 'place_order_time']]


# # 获取weekday ---不是属性---是方法 ---一周中的第几天
# detail.loc[:, 'weekday'] = [i.weekday() for i in detail.loc[:, 'place_order_time']]


# # 获取 Weekday_name ----周几
# detail.loc[:, 'weekday_name'] = [i.weekday_name for i in detail.loc[:, 'place_order_time']]


# # 获取date属性 ---获取的是日期属性---方法
# detail.loc[:, 'date'] = [i.date() for i in detail.loc[:, 'place_order_time']]
#
# # 获取time属性
# detail.loc[:, 'time'] = [i.time() for i in detail.loc[:, 'place_order_time']]
#
# # is_leap_year
# detail.loc[:, 'is_leap_year'] = [i.is_leap_year for i in detail.loc[:, 'place_order_time']]
#
# print('增加属性之后的detail:\n', detail)

2.Timedelta 时间类型

Timedelta 是时间相关的类中的一个异类,不仅能够使用正数,还能够使用负数表示单位时间,例如 1 秒,2 分钟,3 小时等。使用 Timedelta 类,配合常规的时间相关类能够轻松实现时间的算术运算。目前 Timedelta 函数中时间周期中没有年和月。
数据大清洗_Pandas库进阶(Pandas时间数据)_第5张图片
代码实现:

import pandas as pd

# 时间差计算  ----> Timedelta
# 计算一下2020-6-16 ---->2021-1-1
# pandas默认时间点类型 之间的差值的计算
# res = pd.to_datetime('2021-1-1') - pd.to_datetime('2020-6-16')
# print('res:\n', res)  # 199 days 00:00:00
# print('res的类型:\n', type(res))  # 
#
# # 获取 Timedelta的日/月
# print(res.days / 30)



# 也可以计算时间推移
# 2020-6-16 --->4天之后
# res = pd.to_datetime('2020-6-16') + pd.Timedelta(days=4)
# print('res:\n', res)  # 2020-06-20 00:00:00

# 2天之前
# res = pd.to_datetime('2020-6-16') + pd.Timedelta(days=-2)
# res = pd.to_datetime('2020-6-16') - pd.Timedelta(days=2)
# print('res:\n', res)  # 2020-06-20 00:00:00


# 参数:[weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds]
# res = pd.to_datetime('2020-6-16') + pd.Timedelta(years=2)  # 错误的, 不存在years
# print('res:\n', res)

你可能感兴趣的:(python之数据大清洗)