pandas强制重置索引失效:DataFrame索引从9开始无法归0如何解决
索引异常问题修复方案
问题根因
- 打印操作执行顺序错误:你是先打印
df、后调用reset_index重置索引,打印时dropna操作已经删除了前9行数据,仅剩下索引为9的最后一行,所以打印出来索引从9开始。 - 函数返回值错误:
reset_index设置inplace=True时会直接修改原df,返回值为None,你当前直接返回该调用结果会导致函数返回空值,而非处理好的DataFrame。 - 额外数据错误:构造数据字典时
low字段错误赋值为close_lst,会导致low列和close列数据完全一致。
修复代码
调整操作顺序、修正字段赋值和返回逻辑即可,修复后代码如下:
import time import random import datetime import pandas as pd from colored import colored # 示例K线生成代码 candles = [ [time.time()*1000 , random.randint(1000 ,9999) , random.randint(1000 ,9999) ,random.randint(1000 ,9999),random.randint(1000 ,9999),random.randint(1000 ,9999) ] for i in range(10) ] def handler(candles): date_time, open_lst , high_lst , low_lst , close_lst , volume_lst = [],[],[],[],[],[] for item in candles: dt = datetime.fromtimestamp(float(item[0])/1000) date_time.append(dt) open_lst.append(float(item[1])) high_lst.append(float(item[2])) low_lst.append(float(item[3])) close_lst.append(float(item[4])) volume_lst.append(float(item[5])) # 修正low字段赋值错误 coin_data_frame = { 'dt': date_time, 'open': open_lst, 'high': high_lst, 'low': low_lst, 'close': close_lst, 'volume': volume_lst } df = pd.DataFrame(coin_data_frame , columns= ['dt','open','high','low', 'close', 'volume'] ) rolling_mean = df['close'].rolling(window=5, min_periods=5 ).mean() rolling_mean2 = df['close'].rolling(window=10, min_periods=10 ).mean() df['5_sma'] = rolling_mean df['10_sma'] = rolling_mean2 # 合并两次dropna操作 df.dropna(subset = ["5_sma", "10_sma"], inplace=True) # 重置索引操作移到打印之前 df.reset_index(drop=True, inplace=True) print(colored.yellow(str(df))) # 直接返回处理完成的df return df # 测试调用 handler(candles)
补充说明
如果不习惯用inplace参数,也可以将重置索引的代码替换为df = df.reset_index(drop=True),效果完全一致。
内容的提问来源于stack exchange,提问作者packetsniffer
相关产品推荐
相关产品推荐

