我正在尝试使用随机化函数来选择游戏中的随机参与者。基本上我的逻辑是:
从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/