截断时间系列文件并提取一些描述性变量

Truncate a time serie files and extract some descriptive variable

提问人:Romain LOMBARDI 提问时间:2/8/2023 更新时间:2/8/2023 访问量:56

问:

我有两个主要问题,我无法想象python的解决方案。现在,我向你解释上下文。 一方面,我有一个数据集,其中包含一些 ID 为 ID(1 个 ID = 1 个患者)的日期点,如下所示:

编号 日期点
0001 25/12/2022 09:00
0002 29/12/2022 16:00
0003 30/12/2022 18:00
... ....

另一方面,我有一个文件夹,其中包含许多包含时间序列的文本文件,如下所示:

0001.txt
0002.txt
0003.txt
...

这些文件具有相同的架构:ID(与数据集相同)在文件名中,文件内部的结构如下(第一列包含日期和第二列 de 值):

25/12/2022 09:00 155 25/12/2022 09:01 156 25/12/2022 09:02 157 25/12/


2022 09:03
158 ...

1/ 我想截断文本文件并仅检索 48H 数据集日期点之前的变量。

2/ 为了进行一些统计分析,我想取一些值,例如该变量的平均值或最大值,并添加如下数据帧:

编号 意味 着 最大
0001
0002
0003
... .... ...

我知道对你来说这将是一个微不足道的问题,但对我来说(python代码的初学者)这将是一个挑战!

谢谢大家。

使用包含日期点的数据帧管理时间序列,并获取一些统计值。

python 时间序列 文本文件 数据操作

评论

0赞 Community 2/8/2023
请提供足够的代码,以便其他人可以更好地理解或重现问题。
0赞 luca 2/8/2023
“在 48H 数据集日期点之前”是什么意思?
0赞 Romain LOMBARDI 2/8/2023
我的意思是日期点前 48 小时(文件包含日期点前大约 14 天。

答:

0赞 Matt Pitkin 2/8/2023 #1

你可以用熊猫来做这些事情(我无法完全测试这一点):

import pandas as pd
from pathlib import Path


# I'll create a limited version of your initial table
data = {
    "ID": ["0001", "0002", "0003"],
    "Date point": ["25/12/2022 09:00", "29/12/2022 16:00", "30/12/2022 18:00"]
}

# put in a Pandas DataFrame
df = pd.DataFrame(data)

# convert the "Date point" column to a datetime object
df["Date point"] = pd.to_datetime(df["Date point"])

# provide the path to the folder containing the files
folder = Path("/path_to_files")

newdata = {"ID": [], "Mean": [], "Maximum": []}  # an empty dictionary that you'll fill with the required statistical info

# loop through the IDs and read in the files
for i, date in zip(df["ID"], df["Date point"]):
    inputfile = folder / f"{i}.txt"  # construct file name
    if inputfile.exists():
        # read in the file
        subdata = pd.read_csv(
            inputfile,
            sep="\s+",  # columns are separated by spaces
            header=None,  # there's no header information
            parse_dates=[[0, 1]],  # the first and second columns should be combined and converted to datetime objects
            infer_datetime_format=True
        )

        # get the values 48 hours after the current date point
        td = pd.Timedelta(value=48, unit="hours")
        mask = (subdata["0_1"] > date) & (subdata["0_1"] <= date + td)

        # add in the required info
        newdata["ID"].append(i)
        newdata["Mean"].append(subdata[2].loc[mask].mean())
        newdata["Maximum"].append(subdata[2].loc[mask].max())

# put newdata into a DataFrame
dfnew = pd.DataFrame(newdata)

评论

0赞 Romain LOMBARDI 2/8/2023
哦,是的!谢谢!我今天将测试这一点,然后我回到你身边。