Python数据分析_Pandas_日期类型处理_7

内容大纲
  • 日期类型处理
    • 获取日期中不同部分
    • 日期运算
    • 日期索引
    • 生成日期时间序列
  • 数据可视化介绍
  • Matplotlib API介绍
    • 直方图
    • 散点图

在这里插入图片描述

1.Pandas日期时间类型简介
  • 概述

    • 和其它语言类似, Python内置了datetime对象,可以在datetime库中找到
    • pandas的日期时间类型默认是 datetime64[ns]
  • 实例代码

    • Python中的-日期时间类型

      # 导包
      from datetime import datetime   # 这个是原生Python包的内容
      import pandas as pd
      
      # 场景1: 演示Python中的 日期时间类型
      # 1. 获取当前时间
      t1 = datetime.now()
      t1  # datetime.datetime(2024, 4, 26, 20, 6, 8, 677626)
      
      # 2. 可以手动设置日期.
      t2 = datetime(2024, 5, 1)
      t2  # datetime.datetime(2024, 5, 1, 0, 0)
      
      # 3. 计算两个日期差.
      t2 - t1 # datetime.timedelta(days=4, seconds=13935, microseconds=831597)
      
    • Pandas中的-日期时间类型

      # 1. 加载: 疫情期间的 埃博拉数据.
      ebola = pd.read_csv('data/country_timeseries.csv')
      ebola.head()
      
      # 2. 查看每列详情.
      ebola.info()    # 发现 Date是object(字符串类型)的
      
      # 3. 把Date列转成 datetime类型的时间, 并添加到 ebola这个df对象中.
      ebola['date_df'] = pd.to_datetime(ebola['Date'])
      
      # 4. 再次查看 ebola 这个df对象的列信息.
      # 发现 date_df列 是 datetime64[ns]日期类型(可以精确到纳秒, 准不准就是另一回事儿了)
      ebola.info()     # pandas 中默认的日期时间类型就是 datetime64[ns]
      
      # 5. 也可以通过如下的函数, 直接封装日期时间类对象.
      # 这个是: 日期时间戳 对象
      pd.Timestamp(2024, 5, 1)    # Timestamp('2024-05-01 00:00:00')
      # 这个是: 日期时间 对象.
      pd.datetime(2024, 5, 1)     # datetime.datetime(2024, 5, 1, 0, 0), 结果是python的日期类型
      
      # 6. pandas支持, 读取文件数据的时候, 把指定列转成日期列.
      # 写列名 或者 写列的索引均可, 但是需要传入: 列表形式的数据, 因为可能要转换的列有多列.
      ebola = pd.read_csv('data/country_timeseries.csv', parse_dates=['Date'])
      # ebola = pd.read_csv('data/country_timeseries.csv', parse_dates=[0])
      ebola.info()
      
      
2.日期时间类型-获取日期中不同部分
# 1. 获取日期时间类型的 对象.
time_stamp = pd.to_datetime('2024-05-13')   # 把字符串转成 Timestamp类型.
time_stamp  # panda的日期时间类型(时间戳)

# 2. 获取年
time_stamp.year
time_stamp.month
time_stamp.day
time_stamp.dayofyear	# 年中第几天



# 3. 获取埃博拉数据的年, 月, 日.
# .dt 是把Series对象转成 DatetimeProperties 对象, 然后就能获取不同的时间了.
ebola['year'] = ebola['Date'].dt.year
ebola['month'] = ebola['Date'].dt.month
ebola['day'] = ebola['Date'].dt.day

# 4. 查看ebola数据
ebola.info()
3.日期时间类型-日期运算
  • 案例1: 埃博拉数据演示

    # 1. 计算各个国家, 疫情爆发的天数
    # 埃博拉数据中, Day表示各个国家, 疫情爆发的时间(第几天)
    ebola['Date'] - ebola['Date'].min()
    
    # 2. 给ebola这个df对象新增一列, 表示: 疫情天数, 即: 日期 - 爆发的哪一天
    ebola['outbreak_d'] = ebola['Date'] - ebola['Date'].min()
    
    # 3. 查看数据
    ebola.head()
    ebola.info()    # 能看到 outbreak_d 列为: timedelta64[ns] (日期差类型)
    
  • 案例2: 银行数据演示

    # 1. 加载银行数据, 把最后两列转为: 日期列
    banks = pd.read_csv('data/banklist.csv', parse_dates=[5, 6])
    banks.info()
    
    # 2. 计算银行倒闭的季度 和 年份, 并把该列值添加到 df中.
    banks['Closing_Quarter'], banks['Closing_Year'] = (banks['Closing Date'].dt.quarter, banks['Closing Date'].dt.year)
    banks
    
    # 3. 统计每年倒闭的银行数.
    banks['Closing_Year'].value_counts()
    
    # 4. 计算每年, 每季度, 银行倒闭数.
    banks.groupby(['Closing_Year', 'Closing_Quarter']).size()   # 统计长度(个数).
    banks.groupby(['Closing_Year', 'Closing_Quarter']).count()  # 统计个数, 效果同上.
    
    # 透视表方式实现, 效果同上.
    banks.pivot_table(index=['Closing_Year', 'Closing_Quarter'], values='Bank Name', aggfunc='count')
    
    # 5. 可视化展示
    banks.pivot_table(index=['Closing_Year', 'Closing_Quarter'], values='Bank Name', aggfunc='count').plot(grid=True)
    
4.日期时间索引
# 1. 加载特斯拉股票数据.
tesla_stock = pd.read_csv('data/TSLA.csv', parse_dates=[0])
tesla_stock

# 2. 查看该df的列信息
tesla_stock.info()

# 3. 获取开盘价, 最小值, 最大值
tesla_stock['Open'].min()
tesla_stock['Open'].max()

# 4. 获取2015年, 8月的数据
# 方式1: 不使用日期索引,   df对象[(条件1) & (条件2)]
# & 支持   Series 和 Series的比较
# and 不支持 Series 和 Series的比较
tesla_stock[(tesla_stock['Date'].dt.year == 2018) & (tesla_stock['Date'].dt.month == 8)]

# 方式2: 使用日期索引实现.
tesla_stock.set_index('Date', inplace=True)
# tesla_stock
tesla_stock.loc['2015-08']
# tesla_stock['2015-08']  这种写法在2.0的版本已经被删除了



# 还可以使用 timedelta 类型-时间差类型 实现.
tesla_stock['ref_date'] = tesla_stock['Date'] - tesla_stock['Date'].min()

# 把timedelta设置为 index
# tesla_stock.set_index('ref_date')
tesla_stock.index = tesla_stock['ref_date'] # 效果同上

# 查看数据
tesla_stock.head()

# 基于ref_date 来选择数据
tesla_stock['0 days' : '5 days']

# 注意: 切片方式获取数据, (切片列)要求是要有序的
tesla_stock['5 days' : '0 days']    # 获取不到数据.

# 这个可以获取到数据.
tesla_stock.sort_index(ascending=False)['5 days' : '0 days']
5.生成日期时间序列
  • 格式

    pd.date_range('起始时间','结束时间', freq= 生成时间序列的方式)	# frequency:出现频次
    
  • 参数freq可以取得值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十六ᵛᵃᵉ

停船靠岸_愿君通关

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值