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

基于Python实现时间序列截断与统计特征提取需求

解决方案

步骤1:导入必备工具库

先把需要用到的Python库导入,这些都是初学者容易上手的基础库:

import pandas as pd
from datetime import datetime, timedelta
import os

步骤2:加载主患者数据集

假设你的主数据集是CSV格式(比如叫patient_list.csv),里面包含ID和Date point两列。首先要把时间列转成可计算的格式,不然没法算48小时的时间范围:

# 读取主数据集
main_data = pd.read_csv('patient_list.csv')
# 把Date point转成datetime类型,这步是时间计算的关键
main_data['Date point'] = pd.to_datetime(main_data['Date point'])

步骤3:处理单个患者的时间序列文件

循环遍历每个患者,找到对应的同名文本文件,筛选出Date point前48小时内的数据,再计算统计量:

# 用来存最终统计结果的空列表
final_stats = []

for _, patient in main_data.iterrows():
    pid = patient['ID']
    # 计算截断时间:Date point往前推48小时
    cutoff_time = patient['Date point'] - timedelta(hours=48)
    # 拼接时间序列文件路径
    file_path = f"{pid}.txt"
    
    # 先检查文件是否存在,避免报错
    if not os.path.exists(file_path):
        print(f"提示:找不到患者{pid}的时间序列文件")
        # 缺失文件的话用NaN填充统计值
        final_stats.append({
            'ID': pid,
            '均值': float('nan'),
            '最大值': float('nan'),
            '最小值': float('nan'),
            '有效数据量': 0
        })
        continue
    
    # 读取时间序列文件,假设每行是「时间,数值」格式
    ts_data = pd.read_csv(file_path, names=['时间', '数值'], header=None)
    # 同样把时间列转成datetime类型
    ts_data['时间'] = pd.to_datetime(ts_data['时间'])
    
    # 筛选出48小时窗口内的数据
    filtered_data = ts_data[(ts_data['时间'] >= cutoff_time) & (ts_data['时间'] <= patient['Date point'])]
    
    # 计算统计量
    if filtered_data.empty:
        # 窗口内没有有效数据的情况
        stats = {
            'ID': pid,
            '均值': float('nan'),
            '最大值': float('nan'),
            '最小值': float('nan'),
            '有效数据量': 0
        }
    else:
        stats = {
            'ID': pid,
            '均值': filtered_data['数值'].mean(),
            '最大值': filtered_data['数值'].max(),
            '最小值': filtered_data['数值'].min(),
            '有效数据量': len(filtered_data)
        }
    
    final_stats.append(stats)

步骤4:生成统计结果DataFrame

把收集到的统计数据转成DataFrame,还可以保存成文件方便后续使用:

# 转成DataFrame格式
stats_df = pd.DataFrame(final_stats)
# 按ID排序(可选)
stats_df = stats_df.sort_values('ID').reset_index(drop=True)

# 查看结果
print(stats_df.head())

# 保存到CSV文件(可选)
stats_df.to_csv('patient_stats.csv', index=False)

新手注意事项

  • 时间格式适配:如果你的时间格式不是默认的YYYY-MM-DD HH:MM:SS,可以给pd.to_datetime加format参数,比如pd.to_datetime(ts_data['时间'], format='%Y/%m/%d %H:%M')
  • 文件路径调整:如果时间序列文件都在某个文件夹里,把file_path改成f"你的文件夹名/{pid}.txt"
  • 异常处理:如果遇到文件格式混乱、数值不是数字的情况,可以加try-except块避免程序崩溃,比如:
try:
    ts_data['数值'] = pd.to_numeric(ts_data['数值'], errors='coerce')
except Exception as e:
    print(f"患者{pid}的文件解析出错:{e}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:31:14