File size: 889 Bytes
590a501 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | """Basic cleaning utilities for qlib feature frames."""
from __future__ import annotations
import numpy as np
import pandas as pd
def clean_feature_frame(df: pd.DataFrame, clip_return: float = 0.30) -> pd.DataFrame:
"""Replace inf, clip extreme returns if present, forward-fill within instrument."""
out = df.replace([np.inf, -np.inf], np.nan).copy()
if isinstance(out.index, pd.MultiIndex):
out = out.groupby(level="instrument", group_keys=False).apply(lambda x: x.ffill())
return out
def filter_liquidity(df: pd.DataFrame, min_volume: float = 0.0) -> pd.DataFrame:
"""Drop rows with zero/NaN volume when volume column exists."""
volume_cols = [c for c in df.columns if c in ("$volume", "成交量", "volume")]
if not volume_cols:
return df
vol = df[volume_cols[0]]
mask = vol.notna() & (vol > min_volume)
return df.loc[mask]
|