Python 在数据帧中找不到索引
我试图用一个简单的q学习算法解决一个强化学习问题。 如果代理还不知道,我必须将新状态添加到表中。 我遇到的问题是,当我了解新状态时,我有以下错误: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(
“没有[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