Pandas2.2 DataFrame
Time Series-related
方法 描述 DataFrame.asfreq(freq[, method, how, …]) 用于**将时间序列数据转换为指定频率(resample to frequency)**的方法 DataFrame.asof(where[, subset]) 用于查找时间序列中最接近指定时间点的非 NaN 值 的方法 DataFrame.shift([periods, freq, axis, …]) 用于**将 DataFrame 的数据沿着指定轴移动(平移)**的方法
pandas.DataFrame.shift()
pandas.DataFrame.shift()
是一个用于**将 DataFrame 的数据沿着指定轴移动(平移)**的方法。它常用于时间序列分析中,例如计算滞后值(lag)、滚动变化等。
📌 方法签名
DataFrame. shift( periods= 1 , freq= None , axis= 0 , fill_value= < no_default> , suffix= None )
🔧 参数说明:
参数 说明 periods
移动的步数,默认为 1
;正值表示向下/向右移动,负值表示向上/向左移动 freq
可选参数,如果索引是时间类型,可以指定频率(如 'D'
, 'H'
等),此时会调整时间索引而不是数据 axis
移动方向,默认为 0
(行方向),即纵向移动;若为 1
则横向移动列 fill_value
用于填充新引入的 NaN 值,默认为 NaN
,可设置为任意标量(如 0
) suffix
Pandas 2.2 新增参数,用于在移动后重命名列名,仅在返回新 DataFrame 时有效(当 freq
不为 None 时不生效)
✅ 返回值
返回一个新的 DataFrame; 原始数据不会被修改(除非使用 inplace=True
);
🧪 示例代码及结果
示例 1:基本用法(默认参数)
import pandas as pd
import numpy as np
df = pd. DataFrame( { 'A' : [ 10 , 20 , 30 , 40 ] , 'B' : [ 100 , 200 , 300 , 400 ]
} , index= [ 'x' , 'y' , 'z' , 'w' ] ) print ( "Original DataFrame:" )
print ( df)
输出:
A B
x 10 100
y 20 200
z 30 300
w 40 400
shifted_df = df. shift( )
print ( "\nAfter shift():" )
print ( shifted_df)
输出:
A B
x NaN NaN
y 10.0 100.0
z 20.0 200.0
w 30.0 300.0
示例 2:向前移动(负数 periods)
shifted_up = df. shift( - 1 )
print ( "\nAfter shift(-1):" )
print ( shifted_up)
输出:
A B
x 20.0 200.0
y 30.0 300.0
z 40.0 400.0
w NaN NaN
示例 3:设置 fill_value
shifted_fill0 = df. shift( fill_value= 0 )
print ( "\nAfter shift(fill_value=0):" )
print ( shifted_fill0)
输出:
A B
x 0 0
y 10 100
z 20 200
w 30 300
示例 4:按时间频率移动(freq
参数)
index = pd. date_range( '2025-01-01' , periods= 4 , freq= 'D' )
df_time = pd. DataFrame( { 'value' : [ 10 , 20 , 30 , 40 ]
} , index= index) print ( "Original Time Series DataFrame:" )
print ( df_time)
输出:
value
2025-01-01 10
2025-01-02 20
2025-01-03 30
2025-01-04 40
shifted_freq = df_time. shift( freq= 'D' )
print ( "\nAfter shift(freq='D'):" )
print ( shifted_freq)
输出:
value
2025-01-02 10
2025-01-03 20
2025-01-04 30
2025-01-05 40
🧠 应用场景
场景 说明 时间序列滞后分析 计算当前值与前一时刻的差值、增长率等 特征工程 构造滞后特征用于预测模型 数据对齐 对齐不同时间点的数据进行比较 缺失值插入 模拟缺失或延迟观测数据 窗口计算辅助 配合 .diff()
, .pct_change()
等方法使用
⚠️ 注意事项
shift()
默认是按行移动(axis=0
);如果使用 freq
,则不会改变数据内容,只会移动索引; suffix
参数只在返回新 DataFrame 时生效(不能与 freq
一起使用);fill_value
可以避免出现 NaN
,便于后续处理;若 periods
很大,可能导致大量 NaN
出现。
✅ 总结对比
方法 是否移动数据 是否支持时间频率 是否支持列名后缀 是否填充缺失值 .shift()
✅ ✅ ✅(Pandas 2.2+) ✅ .diff()
✅(自动调用 shift) ❌ ❌ ❌ .rolling()
❌ ❌ ❌ ❌ .reindex()
❌ ✅ ❌ ✅
如果你希望构造滞后变量、对齐时间序列数据、或模拟延迟观测 ,shift()
是非常实用且灵活的工具。