时间序列缺失值填充
时间: 2025-04-01 17:13:05 浏览: 81
### 时间序列数据缺失值填充方法
时间序列数据通常具有连续的时间戳,但在实际应用中可能会遇到某些时间段的数据丢失情况。为了保持数据的完整性和一致性,可以使用多种方法对缺失值进行填充。
以下是几种常见的缺失值填充方法及其对应的 Python 实现:
#### 1. 后向填充 (Backward Fill)
后向填充会用缺失值之后的第一个有效值来替换缺失值。这种方法适用于当未来数据可用时的情况。
```python
import pandas as pd
import numpy as np
data = pd.Series([np.nan, np.nan, 3, np.nan, 5], index=pd.date_range('2023-01-01', periods=5))
data_bfilled = data.bfill()
print(data_bfilled)
```
此代码片段展示了如何利用 `bfill()` 函数完成后向填充操作[^1]。
#### 2. 前向填充 (Forward Fill)
前向填充则相反,它会用缺失值之前的有效值来替代缺失值。对于时间序列数据来说,这是一种常用的技术。
```python
data_ffilled = data.ffill()
print(data_ffilled)
```
上述代码实现了基于 Pandas 的前向填充功能[^2]。
#### 3. 插值法 (Interpolation)
插值是一种更复杂的填充方式,可以根据已知数据点之间的关系估计未知值。线性插值是最简单的一种形式。
```python
data_interpolated = data.interpolate(method='linear')
print(data_interpolated)
```
这里采用了线性插值的方式来进行缺失值填充。
#### 4. 平均值/众数填充
如果希望在整个时间序列范围内计算平均值或者每列的众数作为填充依据,则可采取如下策略:
```python
mean_value = data.mean(skipna=True)
data_mean_filled = data.fillna(mean_value)
mode_value = data.mode().iloc[0]
data_mode_filled = data.fillna(mode_value)
```
这段代码分别演示了通过全局平均值以及众数进行缺失值填补的过程[^3]。
#### 5. 自定义函数填充
还可以编写自定义逻辑来决定如何处理特定条件下的缺失值。比如根据相邻几个周期内的趋势预测可能的数值。
```python
def custom_fill(series):
filled_series = series.copy()
for i in range(len(filled_series)):
if pd.isnull(filled_series[i]):
prev_val = filled_series.iloc[max(0,i-1)]
next_val = filled_series.iloc[min(i+1,len(filled_series)-1)]
filled_series[i] = (prev_val + next_val)/2 if not(pd.isnull(prev_val) or pd.isnull(next_val)) else None
return filled_series
custom_filled_data = custom_fill(data)
print(custom_filled_data)
```
该部分展示了一个简单的自定义填充算法例子。
阅读全文
相关推荐















