问题描述
我有一组以时间戳作为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’并不会报错。
我在遍历数据时受时间戳索引的影响把事情想偏了,特此记录。
当DataFrame的索引为时间戳时,尝试通过索引遍历数据可能会遇到KeyError。问题在于尝试将时间戳作为列名来访问,而非行索引。解决方法是在引用时使用`.loc`,如`df.loc[i]`,这将正确地按行索引数据。此外,对于时间戳索引,可以按年份切片数据,如`df['2020']`,这实际上是按行进行切片,不会引发错误。
6575

被折叠的 条评论
为什么被折叠?



