【问题标题】:How to generate one value each minute out of irregular data?如何从不规则数据中每分钟生成一个值?
【发布时间】:2022-01-04 14:50:59
【问题描述】:

我有测量值事件相关。因此,每分钟的数据量并不相同。为了能够更好地处理这些数据,我的目标是每分钟获取第一行值

我从 csv 导入数据的时间如下所示:

时间

11.11.2011 11:11

11.11.2011 11:11

11.11.2011 11:11

11.11.2011 11:12

11.11.2011 11:12

11.11.2011 11:13

其他值是温度。 一个主要问题是以正确的格式导入时间。 我试图在这个社区的帮助下解决这个问题:

with open('my_file.csv','r') as file:
for line in file:
    try:
        time = line.split(';')[0] #splits the line at the comma and takes the first bit
        time = dt.datetime.strptime(time, '%d.%m.%Y %H:%M')
        print(time)
    except:
        pass

然后我导入温度列并像这样加入它们:

df = pd.read_csv("my_file.csv", sep=';', encoding='latin-1')

df=df[["time", "T1", "T2", "DT1", "DT2"]]

当我打印数据的 dtypes 时,时间是 datetime64[ns] 和其他对象。

我尝试了 groupby 和 resample 的不同选项。像下面这样:

df=df.groupby([pd.Grouper(key = 'time', freq='1min')])
df.resample('M')

错误消息中指出的一个主要问题是时间的数据类型不适合分组,...因为它不是 DatetimeIndex。 所以我尝试将日期转换为 DatetimeIndex,如下所示:

df.index = pd.to_datetime(daten["time"].index, format='%Y-%m-%d %H:%M:%S')

但后来我重新保存了从 1970-01-01 开始的索引编号,所以我不太确定是否可以使用不规则数据进行这种转换。

如果没有这种转换,我也会收到消息<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000026938A74850>

当我尝试调用我的数据框时,消息会显示出来,并且当像这样将其保存到 csv 时:

df.to_csv('04_01_DTempminuten.csv', index=False, encoding='utf-8',  sep =';', date_format = '%Y-%m-%d %H:%M:%S')

我收到相同的消息,或者只收到一行带有 Dezimalnumber 而不是时间的消息。

有没有人有想法如何处理这些不规则数据以每分钟获取一行值?

感谢您阅读我的问题。我真的很感谢任何想法。

【问题讨论】:

  • 可以与样本数据共享您的文件吗?

标签: python pandas time-series pandas-groupby


【解决方案1】:

如果没有样本数据,我只能展示我如何使用不规则的时间序列来做到这一点,我认为这是你的情况。我使用不定期出现的价格数据。因此,如果您需要对第一分钟的值进行采样,您可以使用 ohlc 聚合函数对特定间隔使用 resample with,这将为每个采样间隔提供四列。

  • 打开:区间中的第一个值
  • 高:最高
  • 低:最低值
  • 关闭:最后一个值

在您的情况下,采样间隔为 1 分钟 ('T')

在以下示例中,我使用一秒 ('S') 作为重采样频率,对 ask 列(您的温度列)进行重采样:

import pandas as pd

df = pd.read_csv('my_tick_data.csv')
df['date_time']  = pd.to_datetime(df['date_time'])
df.set_index('date_time', inplace=True)

df.head(6)

df['ask'].resample('S').ohlc()

这并没有解决你的日期问题,这是这部分的先决条件,因为数据集需要按日期索引。如果您可以提供示例数据,也许我也可以帮助您完成这部分。

【讨论】:

  • pd.to_datetime 请求运行良好,感谢提示,使用格式化程序,现在类型为 datetime64[ns]。重新采样可能是从我的不规则数据中提取规则数据的好方法。正如您所说,仔细查看示例数据很重要。通过仔细观察它们,我发现部分问题在于逗号分隔符是“,”而不是常见的“。”。所以接下来我将尝试在数据框中替换这些,以便能够将日期类型从对象转换为浮点数,然后应用重采样方法。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-02
  • 2013-04-07
相关资源
最近更新 更多