Dataframe拼接后遍历列的简单循环中出现不支持操作异常问题求助
问题分析与解决办法
嘿,这个坑我之前也踩过!咱们来一步步搞清楚为啥会出现这个错误:
错误原因
你的log DataFrame的索引是datetime时间戳类型,不是默认从0开始的整数索引。当你写log.position[i]的时候,pandas会把i(比如循环里的0)当成要查找的索引值,而不是行的位置序号。但你的索引里根本没有0这个时间戳,而且datetime类型和int类型没法做比较,所以先触发了TypeError,后续异常处理又抛出了IndexError。
之前几百次操作都没问题,是因为你之前处理的DataFrame用的是默认整数索引,此时i作为索引值刚好对应行的位置,巧合之下没出错,但这次拼接后的DataFrame保留了原数据的datetime索引,就暴露了问题。
解决方案
给你几个靠谱的解决办法,按需选择:
1. 用.iloc[]按位置访问
直接指定按行的位置来取值,不管索引是什么类型:
for i in range(len(log.index)): if log.position.iloc[i] == 'short': print('ok')
2. 更高效的遍历方式(推荐)
别再用range(len(...))这种老办法啦,试试更Pythonic的遍历方式:
- 直接遍历
position列的元素:for pos in log['position']: if pos == 'short': print('ok') - 用
itertuples()遍历整行(比iterrows()性能更好):for row in log.itertuples(): if row.position == 'short': print('ok')
3. 重置索引(如果不需要原datetime索引的话)
把datetime索引转成普通列,重置成整数索引:
log = log.reset_index() # 之后就可以用你原来的代码遍历了 for i in range(len(log.index)): if log.position[i] == 'short': print('ok')
内容的提问来源于stack exchange,提问作者stanvooz
相关产品推荐
相关产品推荐

