Python 在数据帧中找不到索引

Python 在数据帧中找不到索引,python,pandas,numpy,Python,Pandas,Numpy,我试图用一个简单的q学习算法解决一个强化学习问题。 如果代理还不知道,我必须将新状态添加到表中。 我遇到的问题是,当我了解新状态时,我有以下错误:“没有[x]在[index]中” 我做了一些测试代码来了解发生了什么,并在遇到问题时解决问题,但我没有找到解决这个问题的方法 这是我的密码: import pandas as pd import numpy as np import random actions = [0, 1] obs = (0) q_table = pd.DataFrame(

我试图用一个简单的q学习算法解决一个强化学习问题。 如果代理还不知道,我必须将新状态添加到表中。 我遇到的问题是,当我了解新状态时,我有以下错误:
“没有[x]在[index]中”

我做了一些测试代码来了解发生了什么,并在遇到问题时解决问题,但我没有找到解决这个问题的方法

这是我的密码:

import pandas as pd
import numpy as np
import random

actions = [0, 1]
obs = (0)


q_table = pd.DataFrame(columns=actions)


def check_state_exist(state):
    global q_table
    if state not in q_table.index:
        # append new state to q table
        q_table = q_table.append(
            pd.Series(
                [0]*len(actions),
                index=q_table.columns,
                name=state,
            )
        )
def choose_action(state):
    global actions
    check_state_exist(state)
    # action selection
    if np.random.uniform() < 0.9:
        # choose best action
        state_action = q_table.loc[state, :]
        state_action = state_action.reindex(np.random.permutation(state_action.index))     # some actions have same value
        action = np.argmax(state_action)
    else:
        # choose random action
        action = np.random.choice(actions)
    return action


for i in range(50):

    rand = random.randrange(100)
    if rand == 1:
        obs = 'rare'
    else: 
        obs = [rand, random.randrange(10)]
        obs = tuple(obs)

    choose_action(obs)

谢谢你的帮助。经过几个小时的测试,我终于解决了这个问题。我没有使用元组,而是使用了字符串。
我猜想这是因为.loc试图找到索引的编号,而不是索引的名称。

当您使用元组作为索引时,pandas将自动表现为多索引。如果您想在单独级别索引中使用
(56,5)
进行索引,您可能需要尝试类似
q_table.loc[[(56,5)]]
(但不确定它是否有效)。否则,在Q-learning中,您可以尝试使用多索引

print(q_table)

         0  1
(56, 5)  0  0