【问题标题】:Set Minute Column as Time Index?将分钟列设置为时间索引?
【发布时间】:2018-07-17 13:48:55
【问题描述】:

我有一个多索引数据帧,其分钟时间戳为 5 分钟间隔。我正在尝试将“TimeStamp”列转换为“datetimeindex”,以便可以在此处使用此解决方案 (How do you clean and forward fill a multiple day 1 minute time series with pandas?)。我的样本数据:

            2002074266              2002074444
TimeStamp   Total        Freq       Total       Freq
HH:MM        Pc           Hz         Pc          Hz
06:50        3            10         7           13
06:55        4            11         8           14
07:00        5            12         9           15

有没有可能 - 我已经尝试了以下代码,但它不起作用。

df['TimeStamp'] = pd.to_datetime(df['TimeStamp'])
df = df.set_index('TimeStamp')

它返回 KeyError: 'TimeStamp'。

这是我用来读取 CSV 文件的行:

df = pd.read_csv("Equipment.csv", header=[0,1], skiprows = 3, index_col=0)

任何指南/帮助将不胜感激。谢谢。

【问题讨论】:

  • 时间戳不存在,如果您尝试从 pd.read_csv(...) 中删除 index_col 参数,然后再次运行您的代码会怎样?

标签: python python-3.x pandas


【解决方案1】:

我认为需要先将参数skiprows 更改为[2]

df = pd.read_csv("Equipment.csv", header=[0,1], skiprows = [2], index_col=0)

print (df)
      2002074266      2002074444     
           Total Freq      Total Freq
06:50          3   10          7   13
06:55          4   11          8   14
07:00          5   12          9   15

然后DatetimeIndex解决方案:

df.index = pd.to_datetime(df.index, format='%H:%M')
df = df.resample('1min').ffill()
print (df)
                    2002074266      2002074444     
                         Total Freq      Total Freq
1900-01-01 06:50:00          3   10          7   13
1900-01-01 06:51:00          3   10          7   13
1900-01-01 06:52:00          3   10          7   13
1900-01-01 06:53:00          3   10          7   13
1900-01-01 06:54:00          3   10          7   13
1900-01-01 06:55:00          4   11          8   14
1900-01-01 06:56:00          4   11          8   14
1900-01-01 06:57:00          4   11          8   14
1900-01-01 06:58:00          4   11          8   14
1900-01-01 06:59:00          4   11          8   14
1900-01-01 07:00:00          5   12          9   15

TimedeltaIndex解决方案:

df.index = pd.to_timedelta(df.index + ':00')
df = df.resample('1min').ffill()
print (df)
         2002074266      2002074444     
              Total Freq      Total Freq
06:50:00          3   10          7   13
06:51:00          3   10          7   13
06:52:00          3   10          7   13
06:53:00          3   10          7   13
06:54:00          3   10          7   13
06:55:00          4   11          8   14
06:56:00          4   11          8   14
06:57:00          4   11          8   14
06:58:00          4   11          8   14
06:59:00          4   11          8   14
07:00:00          5   12          9   15

【讨论】:

  • 谢谢耶兹瑞尔。如果这是一个基本问题,我是 Python 新手,很抱歉。如果缺少 x 分钟的间隔,重新采样填充只会在数据的开始和结束之间填充?另外,我很想知道是否可以验证我有 06:50:00 到 07:00:00 的数据。由于数据损坏,某些文件可能会在 07:00:00 丢失(例如 06:50:00 到 06:56:00,所以我需要使用之前的数据填充到 07:00:00)。
  • @SunnyBoiz - 你是对的,它用前向填充替换并为连续索引添加所有缺失的行。
猜你喜欢
  • 2022-01-25
  • 1970-01-01
  • 2021-09-09
  • 2019-01-13
  • 2021-06-19
  • 2021-06-30
  • 1970-01-01
  • 2020-07-31
相关资源
最近更新 更多