Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 时间序列数据:填补时间序列数据和聚合值中的空白_Python_Python 3.x_Vba_Time Series_Aggregate - Fatal编程技术网

Python 时间序列数据:填补时间序列数据和聚合值中的空白

Python 时间序列数据:填补时间序列数据和聚合值中的空白,python,python-3.x,vba,time-series,aggregate,Python,Python 3.x,Vba,Time Series,Aggregate,我是使用VBA在Excel工作表中组织一些数据的新手。如果Python更容易的话,我也有一些Python方面的经验 我有一个来自模型的.csv文件,该文件输出一个不连续的时间序列(只要有流入,但不是每1分钟一次): 日期/时间排水cm/BRA2014年5月10日11:00 02014年5月10日11:01 12014年5月10日 11:02 25/10/1411:03 25/10/1411:04 15/11/1417:00 15/11/1417:01 0 5/11/14 7:02 15/11/1

我是使用VBA在Excel工作表中组织一些数据的新手。如果Python更容易的话,我也有一些Python方面的经验

我有一个来自模型的.csv文件,该文件输出一个不连续的时间序列(只要有流入,但不是每1分钟一次):

日期/时间排水cm/BRA
2014年5月10日11:00 0
2014年5月10日11:01 1
2014年5月10日 11:02 2
5/10/1411:03 2
5/10/1411:04 1
5/11/1417:00 1
5/11/1417:01 0
5/11/14 7:02 1
5/11/14 7:03 1
5/11/14 7:04 0
5/11/14 7:05 0

我想要的是能够将数据聚合到2分钟的时间步长。所以我得到这个:

日期/时间排水cm/BRA
2014年5月10日11:00 1
2014年5月10日11:02 4
2014年5月10日 11:04 1
5/10/1411:06 0
5/10/1411:08 0
。。。

……
2014年5月11日6:58 0
2014年5月11日7:00 1
2014年5月11日7:02 2
2014年5月11日7:04 0

我已经有了一个代码,只要我有一个连续的数据文件(在本例中,填充5/10/14 11:04到5/11/14 7:00之间的间隙),就可以为我聚合数据。您可以想象,对于微小的数据,有太多的数据需要手动填补空白,更不用说我必须为70多个输出文件复制这些数据


任何关于创建连续时间序列或将时间序列聚合到2分钟(尽管时间序列中的间隔不均匀)的建议请尝试此解决方案。它采用了
pandas
和以下技术:

  • 将CSV文件读入数据帧
  • 组合列数据
  • 将日期/时间字符串转换为
    datetime
    数据类型
  • datetime
    对象以2分钟为间隔
数据质量问题: 您的CSV中存在两个数据质量问题,其中:

  • 数据实际上不是逗号分隔的
  • 列名中有空格
  • 数据中有两列,但有三个空格(日期、时间、日期)
如上所述,代码中有一部分解决了这些问题

示例代码: 输出:
尝试一下这个解决方案。它采用了
pandas
和以下技术:

  • 将CSV文件读入数据帧
  • 组合列数据
  • 将日期/时间字符串转换为
    datetime
    数据类型
  • datetime
    对象以2分钟为间隔
数据质量问题: 您的CSV中存在两个数据质量问题,其中:

  • 数据实际上不是逗号分隔的
  • 列名中有空格
  • 数据中有两列,但有三个空格(日期、时间、日期)
如上所述,代码中有一部分解决了这些问题

示例代码: 输出:
到目前为止,您尝试了什么?遇到了什么问题?您可能会尝试曲线拟合算法。使用Pandas似乎是实现这一点的合理(最简单的方法)。退房可能会让你朝着正确的方向开始。首先,使用函数将数据读入到中。@braX我尝试每两列求和以进行聚合,但在跳过步骤时,这不起作用(例如,5/10/14 11:00值和5/11/14 7:00值将被添加为2分钟时间步骤11:00-11:02的总和)。接下来,我尝试使用if语句验证前一个单元格实际上只有2分钟的差异,但当我这样做时,它会正确输出11:02,但跳过11:04(因为下一个单元格7:00不是2分钟的步长),然后从7:01开始,因为这是11:04以下的2个单元格。这行不通,因为现在所有的时间步都以奇数而不是偶数结束。谢谢@S3DEV。我会调查一下。到目前为止,您尝试了什么?遇到了什么问题?您可能会尝试曲线拟合算法。使用熊猫似乎是实现这一点的合理(最简单的路线)。退房可能会让你朝着正确的方向开始。首先,使用函数将数据读入到中。@braX我尝试每两列求和以进行聚合,但在跳过步骤时,这不起作用(例如,5/10/14 11:00值和5/11/14 7:00值将被添加为2分钟时间步骤11:00-11:02的总和)。接下来,我尝试使用if语句验证前一个单元格实际上只有2分钟的差异,但当我这样做时,它会正确输出11:02,但跳过11:04(因为下一个单元格7:00不是2分钟的步长),然后从7:01开始,因为这是11:04以下的2个单元格。这行不通,因为现在所有的时间步都以奇数而不是偶数结束。谢谢@S3DEV。我会调查的。
import pandas as pd

# Read Excel file into DataFrame.
df = pd.read_csv('./drainage.csv', sep=' ')

# Address data quality issues:
# Combine date and time columns.
df['Date/Time Drainage'] = df['Date/Time'] + ' ' + df['Drainage']
# Drop unneeded columns.
df.drop(['Date/Time', 'Drainage'], axis=1, inplace=True)
# Ensure Date/Time column is a datetime datatype.
df['Date/Time Drainage'] = pd.to_datetime(df['Date/Time Drainage'], format='%m/%d/%y %H:%M')

# Resample to 2 second intervals and sum results.
df = df.set_index('Date/Time Drainage').resample('2T').sum().reset_index()

# Show results.
print(df)
     Date/Time Drainage  cm/BRA
0   2014-05-10 11:00:00       1
1   2014-05-10 11:02:00       4
2   2014-05-10 11:04:00       1
3   2014-05-10 11:06:00       0
4   2014-05-10 11:08:00       0
5   2014-05-10 11:10:00       0
...
597 2014-05-11 06:54:00       0
598 2014-05-11 06:56:00       0
599 2014-05-11 06:58:00       0
600 2014-05-11 07:00:00       1
601 2014-05-11 07:02:00       2
602 2014-05-11 07:04:00       0