24、pivot_table&&datetime

1、pivot_table(数据透视表)

pivot_table(数据透视表)是 pandas 中一个非常重要的功能,用于对数据进行多维度聚合分析,类似于 Excel 的数据透视表功能。

1.1、使用介绍

1、upivot_table参数中最重要的四个参数 values,index,columns,aggfunc
values (值):要聚合的数值列
index (行索引):分组依据的列,作为结果的行索引
columns (列索引):分组依据的列,作为结果的列索引
aggfunc (聚合函数):聚合函数,默认是 'mean'
2、基本语法

pd.pivot_table(data, values=None, index=None, columns=None, 
               aggfunc='mean', fill_value=None, margins=False, 
               dropna=True, margins_name='All')

3、使用示例

import pandas as pd
import numpy as np
data = {
    '日期': pd.date_range('2024-01-01', periods=12, freq='M'),
    '地区': ['北京', '上海', '广州'] * 4,
    '产品': ['A', 'B'] * 6,
    '销售额': np.random.randint(1000, 5000, 12),
    '利润': np.random.randint(100, 1000, 12),
    '数量': np.random.randint(10, 100, 12)
}
df = pd.DataFrame(data)
# 按地区汇总销售额的平均值
pivot1 = pd.pivot_table(df, values='销售额', index='地区', aggfunc='mean')
#        销售额
#地区         
#上海  3151.50
#北京  2865.00
#广州  3171.25
#####################
# 按地区和产品分析销售额
pivot2 = pd.pivot_table(
    df, 
    values='销售额', 
    index='地区', 
    columns='产品', 
    aggfunc='sum'
)
#产品     A     B
#地区            
#上海  6037  6569
#北京  4251  7209
#广州  8723  3962

2、datetime数据类型

2.1、datetime对象

对象打印类型: <class 'datetime.datetime'>

from datetime import datetime
now = datetime.now()
t2 = datetime(2024,1,1)
print(type(now))  
# <class ‘datetime.datetime’>
print(type(t2)) 
# <class ‘datetime.datetime‘>
print(t2) # 2024-01-01 00:00:00
2.2、Timestamp对象

对象打印类型 pandas._libs.tslibs.timestamps.Timestamp
1、to_datetime方法把Date列转换为Timestamp,然后创建新列

ebola = pd.read_csv('data/country_timeseries.csv')
ebola['date_dt'] = pd.to_datetime(ebola['Date'])

2、通过Timestamp对象创建

d = pd.Timestamp(2017,6,19)
type(d) # pandas._libs.tslibs.timestamps.Timestamp

3、通过parse_dates

ebola = pd.read_csv('data/country_timeseries.csv',parse_dates=[0])
ebola.info()
#<class ‘pandas.core.frame.DataFrame‘>
#RangeIndex: 122 entries, 0 to 121
#Data columns (total 19 columns):
# #   Column               Non-Null Count  Dtype         
#---  ------               --------------  -----         
# 0   Date                 122 non-null    object        
# 1   Day                  122 non-null    int64            
# ........................................................................
# 18  date_dt              122 non-null    datetime64[ns]
#dtypes: datetime64[ns](1), float64(16), int64(1), object(1)
#memory usage: 18.2+ KB
#None
ebola['date_dt'] = pd.to_datetime(ebola['Date'])
2.3、timedelta对象

打印对象类型:<class 'datetime.timedelta'>

# Timestamp相减得到的是timedelta对象
diff = now - t2
print(diff) # 731 days, 10:59:22.395606
print(type(diff))
# diff为 <class 'datetime.timedelta'> 类型
2.4、日期操作

1、提取日期各个部分

# d为Timestamp对象 pandas._libs.tslibs.timestamps.Timestamp
d = pd.to_datetime('2023-04-20')
print(d.year)
print(d.month)
print(d.day)
# date_dt为 Timestamp对象 pandas._libs.tslibs.timestamps.Timestamp
ebola['year'] = ebola['date_dt'].dt.year
ebola['month'] = ebola['date_dt'].dt.month
ebola['day'] = ebola['date_dt'].dt.day

2、日期范围
使用date_range函数创建日期序列时,可以传入一个参数freq,默认情况下freq取值为D,表示日期范围内的值是逐日递增的。

head_range = pd.date_range(start='2025-12-28', end='2026-01-01')
print(head_range)
# DatetimeIndex(['2025-12-28', '2025-12-29', '2025-12-30', '2025-12-31',
#               '2026-01-01'],
#              dtype='datetime64[ns]', freq='D')

feq参数的可能取值


feq参数1

feq参数2
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容