【问题标题】:Selecting a range of time-series data and performing data analysis选择一系列时间序列数据并执行数据分析
【发布时间】:2015-03-17 16:34:09
【问题描述】:

我有一个监控设备,可以监控温度、压力和湿度。有了这些数据,我就得到了测量的日期和时间。测量每 5 秒进行一次。我想编写一个函数,为我提供特定日期和时间范围内温度、压力和湿度的平均值和标准偏差。理想情况下是这样的......

def TempPressHumid(time_start, time_end, data_start, date_end, temp_data, press_data, humid_data)

到目前为止我有这个:

import pandas as pd
import numpy as np

df = pd.read_csv('TM4CVC.csv', index_col = 0)

temp_data = df['Temperature']
temp_av = np.mean(temp_data)
temp_sd = np.std(temp_data)

humid_data = df['humidity']
humid_av = np.mean(humid_data)
humid_sd = np.std(humid_data)

press_data = df['pressure']
press_av = np.mean(press_data)
press_sd = np.std(press_data)

这可能吗?

谢谢,

乔伊

【问题讨论】:

标签: python pandas time-series


【解决方案1】:

应该这样做。按时间和日期切片 df。您可以将函数更改为仅接受日期,然后使用格式 'yyyy-mm-dd hh:mm:ss' 对其进行切片,如果您只想要一个连续的日期时间范围,而不必每次都选择时间和日期。

import pandas as pd
import numpy as np
import random

def TempPressHumid(time_start, time_end, date_start, date_end, df):

    temp = df[date_start:date_end]
    temp = df.between_time(time_start,time_end)

    out = {'temp_avg':np.mean(temp['temp']),
    'temp_std':np.std(temp['temp']),
    'press_avg':np.mean(temp['press']),
    'press_std':np.std(temp['press']),
    'humid_avg':np.mean(temp['humid']),
    'humid_std':np.std(temp['humid'])}
    print out


df = pd.DataFrame({'temp':[random.randint(50, 80) for x in range(51841)],
    'press':[random.randint(20, 40) for x in range(51841)],
    'humid':[random.randint(20, 80) for x in range(51841)]}, 
    index = pd.date_range(start = '2014-01-01', end = '2014-01-04', freq = '5S'))

TempPressHumid(time_start = '01:00:00', time_end = '23:00:00', date_start = '2014-01-02', date_end = '2014-01-03', df = df)

这将获取 2014 年 1 月 2 日到 2014 年 1 月 3 日凌晨 1 点到晚上 11 点之间的所有数据。

【讨论】:

  • 感谢您的回复。是否只是将我的数据添加到此...例如 df = pd.DataFrame({'temp': df['data_column'], 'press':df['data_column'], '湿':df ['data_column'], index = pd.date_range(start = '2014-01-01', end = '2014-01-04', freq = '5S')) 我试过了,但我在索引上遇到错误句法。 =/
  • 忽略上面.. 我似乎无法索引我自己的时间和日期。在您给出的示例中,您制作了自己的日期和时间索引......是否可以使用我已经拥有的时间和日期?
  • 绝对有可能。它们是分开测量的吗?所以你会有一个时间列和一个日期列,即 datetime.time() 和 datetime.date() 格式?因为如果将它们组合成一种同时具有日期和时间信息的格式,就会容易得多。如果它们没有格式化为日期时间对象,您可以将它们像字符串一样组合并使用pd.to_datetime() 进行格式化
  • 是的,它们是分开测量的。例如列按此顺序排列......日期、时间、湿度、温度、压力......我不知道如何将函数链接到日期时间索引......我已经定义了我的列变量...... . 但我不知道如何组合和索引日期时间列 =/
  • 希望这可以解释我在说什么。只需在第 3 行中串联替换,然后将其设置为索引。一旦它是索引,您就可以对其进行切片。如果您不熟悉 pandas 操作的基础知识,您应该查看文档。时间序列:pandas.pydata.org/pandas-docs/stable/timeseries.html。或更基本的:pandas.pydata.org/pandas-docs/stable/10min.htmltime = '12:00:00'date = '2014-12-30'datetime = pd.to_datetime(date+' '+time)
猜你喜欢
  • 2019-07-15
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-10
  • 2016-09-12
  • 2021-05-31
  • 2016-08-15
相关资源
最近更新 更多