我正在尝试使用随机函数来选择随机参与者进入游戏。基本上我的逻辑是:
对于我的第二次运行,当使用random.choice方法时,我得到键错误:0。我可以使用tolist()将其更改为列表来纠正它。
让我通过以下代码说明我的意思:
import pandas as pd
import numpy as np
from random import choice
df = pd.DataFrame({'name':['Andy', 'Jack', 'Anne']})
for i in range(1,100):
c_name = choice(df.name.dropna())
df.name.replace(c_name, np.NaN, inplace=True) #Let's say Andy is replaced
# up until here it will work fine
# Trying the 2nd run
for i in range(1,100):
c_name = choice(df.name.dropna())
# !will output Key Error : 0
# if I do this: c_name = choice(df.name.dropna().tolist()) it will be fine.
# if the NaN value is at the last index, it is also fine.
我的问题是为什么random.choice()
表现得像这样?我使用dropna()删除了NaN值,它应该作为一系列没有NaN的名称。
答案 0 :(得分:2)
第一个错误是:
result = self.index.get_value(self,key)
由于random.choice采用了一个序列:
random.choice(seq)从非空序列中返回一个随机元素 起。如果seq为空,则引发IndexError。
所以给定一个数据帧,它会隐式地将每个索引的df更改为一个列表。如果索引不连续,则抛出错误。