DataFrame索引为时间戳时,索引数据报错

DataFrame索引为时间戳时,索引数据报错

  • 问题描述
  • 解决方法

问题描述

我有一组以时间戳作为index的Dataframe数据,想要通过index遍历数据。

df
Out[187]: 
                     Vol_L1       Sp_L1   Ocp_L1  ...   Vsum      Obar         K
2020-06-01 00:00:00   192.0  125.374904  0.01013  ...  816.0  0.012852  6.884671
2020-06-01 00:05:00   132.0  127.081813  0.00702  ...  552.0  0.008780  4.679862
2020-06-01 00:10:00   156.0  125.490484  0.00758  ...  660.0  0.011893  5.640451
2020-06-01 00:15:00   204.0  124.070465  0.01025  ...  888.0  0.016980  8.003095
2020-06-01 00:20:00   192.0  125.344780  0.01007  ...  696.0  0.013200  6.197882

[5 rows x 16 columns]

df.index
Out[188]: 
DatetimeIndex(['2020-06-01 00:00:00', '2020-06-01 00:05:00',
               '2020-06-01 00:10:00', '2020-06-01 00:15:00',
               '2020-06-01 00:20:00'],
              dtype='datetime64[ns]', freq=None)

用以下代码循环读取时有如下报错:

for i in df.index:
    print(df[i])
Traceback (most recent call last):

  。。。太长了,跳过

KeyError: Timestamp('2020-06-01 00:00:00')

反正就是索引不到数据,说这个关键词有问题

解决方法

报错是因为python去列名里查找关键词了,声明让它去行名里查询就好了

for i in df.index:
    print(df.loc[i])    <== 这里从df[i]变成了df.loc[i]
Vol_L1    192.000000
Sp_L1     125.374904
Ocp_L1      0.010130
Vol_L2    408.000000
Sp_L2     122.607136
Ocp_L2      0.022080
Vol_L3    156.000000
Sp_L3     114.022901
Ocp_L3      0.016180
。。。

这就好了

一般要按行对Dataframe索引时会自觉加上.loc[],但是索引为时间戳时有一些特殊操作,比如可以用df[‘2020’]来索引2020年所有的数据。这时相当于是按行来切片的,列名中没有‘2020’并不会报错。

我在遍历数据时受时间戳索引的影响把事情想偏了,特此记录。

你可能感兴趣的:(怎么办系列)