You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

tsfresh中extract_relevant_features两类报错的解决方法咨询

tsfresh extract_relevant_features 两类报错解决方案

问题1:传入df.notnull()触发ValueError

报错信息

features_filtered_direct = extract_relevant_features(df.notnull(),
  File "C:\Users\username\anaconda3\envs\ts-env\lib\site-packages\tsfresh\convenience\relevant_extraction.py", line 172, in extract_relevant_features
    raise ValueError(
ValueError: The following ids are in the time series container but are missing in y: {True}

错误原因

df.notnull()返回的是布尔值组成的DataFrame,并非tsfresh要求的有效时间序列数据。extract_relevant_features要求第一个参数是包含数值型特征的数据集,且需通过id列对时间序列分组。传入布尔矩阵后,函数错误地将布尔值True识别为时间序列id,而该id在标签y中不存在,导致匹配失败。

解决方案

  1. 先处理缺失值,再传入原数据结构:
    • 删除含缺失值的行:df_clean = df.dropna(),将df_clean传入函数;
    • 填充缺失值:df_clean = df.fillna(method='ffill')(或指定填充值如df_clean = df.fillna(0)),再传入处理后的数据集。
  2. 明确指定时间序列分组参数:
    从数据样例看,数据集包含日期列和多列数值/分类列,调用函数时需指定分组id列和时间排序列:
    features_filtered_direct = extract_relevant_features(
        df_clean,
        y,
        column_id='你的id列名',  # 比如样例中第二列的0/1列
        column_sort='日期列名'
    )
    

问题2:传入df后触发TypeError

报错信息

Traceback (most recent call last):
  File "C:\Users\username\anaconda3\envs\ts-env\lib\multiprocessing\pool.py", line 125, in worker
    result = (True, func(*args, **kwds))
  File "C:\Users\username\anaconda3\envs\ts-env\lib\site-packages\tsfresh\utilities\distribution.py", line 43, in _function_with_partly_reduce
    results = list(itertools.chain.from_iterable(results))
  File "C:\Users\username\anaconda3\envs\ts-env\lib\site-packages\tsfresh\utilities\distribution.py", line 42, in <genexpr> 
    results = (map_function(chunk, **kwargs) for chunk in chunk_list)
  File "C:\Users\username\anaconda3\envs\ts-env\lib\site-packages\tsfresh\feature_extraction\extraction.py", line 386, in _do_extraction_on_chunk
    return list(_f())
  File "C:\Users\username\anaconda3\envs\ts-env\lib\site-packages\tsfresh\feature_extraction\extraction.py", line 372, in _f
    result = [("", func(x))]
  File "C:\Users\username\anaconda3\envs\ts-env\lib\site-packages\tsfresh\feature_extraction\feature_calculators.py", line 1704, in sample_entropy
    if np.isnan(x).any():
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

错误原因

报错发生在计算sample_entropy特征时,np.isnan无法处理非数值类型数据。结合数据样例,大概率是以下情况:

  • 数据包含字符串类型列(如日期列、样例中"04"这类带前导零的字符串数字);
  • 部分列的 dtype 为 object 而非数值型(int/float)。

解决方案

  1. 过滤/转换非数值列:
    • 移除非数值列(如日期列):df_numeric = df.drop(columns=['日期列名']);
    • 将字符串格式数字转为数值类型:
      # 遍历列,转换object类型为数值
      for col in df.columns:
          if df[col].dtype == 'object':
              df[col] = pd.to_numeric(df[col], errors='coerce')
      
  2. 禁用引发错误的特征:
    若不需要sample_entropy特征,可在调用时通过参数禁用:
    from tsfresh.feature_extraction import ComprehensiveFCParameters
    
    fc_params = ComprehensiveFCParameters()
    del fc_params['sample_entropy']
    
    features_filtered_direct = extract_relevant_features(
        df,
        y,
        default_fc_parameters=fc_params,
        # 其他参数如column_id、column_sort
    )
    
  3. 检查并修正数据类型:
    通过df.dtypes查看列类型,对异常列手动转换,确保所有特征列为数值型。

内容的提问来源于stack exchange,提问作者Rebel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 09:41:04