【问题标题】:Force index reset in pandas在熊猫中强制索引重置
【发布时间】:2021-05-21 23:24:05
【问题描述】:

以下是我如何从从 API 获得的蜡烛列表中准备 DataFrame

蜡烛列表包含嵌套的开盘价、最高价、最低价、收盘价、成交量值

candles = [ [time.time() , random(1000 ,9999) , random(1000 ,9999) ,random(1000 ,9999),random(1000 ,9999),random(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]))

    ## creating the data frame 
    coin_data_frame = {
        'dt': date_time,
        'open': open_lst,
        'high': high_lst,
        'low': close_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
    df.dropna(subset = ["5_sma"], inplace=True)
    df.dropna(subset = ["10_sma"], inplace=True)



    puts(colored.yellow(str(df)))
    
    return df.reset_index(drop=True, inplace=True) 

puts(colored.yellow(str(df)) 行显示数据帧,但索引不是从 0 开始,而是出于某种原因从 9 开始,我尝试使用df.reset_index(drop=True, inplace=True) ,但它似乎无法解决我的问题我仍然可以看到数据框以 9 开​​头

【问题讨论】:

  • 我在尝试运行您的代码时收到“NameError: name 'candles' is not defined”。简化它并使其可运行。

标签: python pandas


【解决方案1】:

使用任一

return df.reset_index(drop=True) 

df.reset_index(drop=True, inplace=True)
return df

你使用了return df.reset_index(drop=True, inplace=True) 这是错误的,因为当inplace=True 方法返回None。在此处查看docs

固定代码:

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]))

    ## creating the data frame 
    coin_data_frame = {
        'dt': date_time,
        'open': open_lst,
        'high': high_lst,
        'low': close_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
    df.dropna(subset = ["5_sma"], inplace=True)
    df.dropna(subset = ["10_sma"], inplace=True)
    df.reset_index(drop=True, inplace=True)
    return df

candles = [ [time.time() , np.random.randint(1000 ,9999) , 
             np.random.randint(1000 ,9999) ,
             np.random.randint(1000 ,9999),
             np.random.randint(1000 ,9999),
             np.random.randint(1000 ,9999) ] for i in range(10) ] 

print (handler(candles))
  

输出:

dt    open    high  ...  volume   5_sma  10_sma
0 1970-01-19 18:27:20.858940  2370.0  1095.0  ...  4547.0  5433.6  4643.6

[1 rows x 8 columns]

【讨论】:

  • 我尝试了reset_index(drop=True),但从 9 开始我仍然得到相同的输出
猜你喜欢
  • 1970-01-01
  • 2019-04-10
  • 2015-02-28
  • 2013-12-27
相关资源
最近更新 更多