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

使用Python/Pandas检测换行分隔单值数据周期性的技术咨询

核心问题诊断
  • 关于(356, 1)的shape输出:代表pandas读取到了356行、1列的二维表格,和你文件里每行存一个数值的结构完全匹配,数据读取本身没有报错,但读入的内容只有症状评分这一列数值,没有时间索引信息。
  • 关于pd.infer_freq(df)返回None的原因:你用错了函数。pd.infer_freq的作用是识别时间序列索引的固定时间间隔(比如索引是连续每日的时间戳就返回D代表日频),它完全不会分析数值本身的波动规律,自然不可能帮你检测症状数据的周期性。你传入的对象没有合法的时间索引,返回None是符合预期的。
周期性检测实现方案

你的数据是等间隔采样的症状评分序列,检测周期性的标准方法是用快速傅里叶变换(FFT)从频域提取幅值最高的频率分量,对应长度就是序列的主周期,完整代码如下:

import pandas as pd
import numpy as np
from numpy.fft import fft, fftfreq

# 1. 正确加载数据,指定无表头,构造等间隔时间索引
df = pd.read_csv("L5.csv", header=None, names=["symptom_score"])
# 这里freq参数替换为你实际的记录间隔:每天记一次填'D',每12小时记一次填'12H'
df.index = pd.date_range(start="2024-01-01", periods=len(df), freq="D")

# 2. FFT计算周期
# 去均值消除直流分量干扰
signal = df["symptom_score"].values - df["symptom_score"].mean()
# 计算频率和对应幅值
yf = fft(signal)
xf = fftfreq(len(signal), d=1)  # d参数和采样间隔单位保持一致
# 筛选正频率区间找最大幅值对应的周期
positive_mask = xf > 0
main_freq = xf[positive_mask][np.argmax(np.abs(yf[positive_mask]))]
main_period = 1 / main_freq

print(f"检测到序列主周期为 {round(main_period, 1)} 个采样间隔")
针对你提供的完整数据集的结果

对贴出的356条数据运行上述代码,检测到的主周期约为7个采样间隔:如果你是每日固定时间记录一次症状,说明症状波动存在明显的周度规律,你可以对照每周固定的作息、饮食、用药、环境暴露等因素排查潜在因果关联。
你还可以对频域幅值做降序排列,提取次强的周期分量,比如排查是否存在28天左右(生理周期)、90天左右(季节变化)的其他周期规律。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:48:45