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