我正在尝试使用随机化函数来选择游戏中的随机参与者。基本上我的逻辑是:


从dataframe列中随机选择1个名称(使用random.choice())
通过用NaN替换该名称来屏蔽该名称
重新运行


对于我的第二次运行,使用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的一系列名称。

最佳答案

第一个错误是:


  结果= self.index.get_value(self,键)


由于random.choice需要一个序列:


  random.choice(seq)从非空序列返回一个随机元素
  seq。如果seq为空,则引发IndexError。


因此,给定一个数据框,它将通过每个索引将df隐式更改为一个列表。如果索引不连续,则会引发错误。

关于python - 为何在使用random.choice()时出现此关键错误:0?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46483947/

10-14 17:58