我有一个简单的脚本,该脚本读取播放器ID的excel文件,创建2列的字典并映射这2列以更新数据帧中的播放器ID。我要尝试做的是创建一个循环,在该循环中,我可以打印excel文件中没有对应ID的任何播放器,自己手动更新excel文件,然后重试脚本。
到目前为止,我已经到了要求再次运行的地步,但是在第二次尝试时,映射行将所有ID标识为丢失,我认为这意味着在读取excel文件或原始框架时存在问题。任何帮助,将不胜感激。
def main(frame):
while True:
playerlist = read_csv('PlayerList').fillna(0)
frame.iloc[:,0] = frame.iloc[:,0].astype(float).map(dict(zip(playerlist['old_id'], playerlist['new_id'])))
missing = frame[frame.iloc[:,0].isnull()]
print(missing) #See which players have missing ID's
run_again = input('Run again? ') #Fix missing ID's in the excel file, then type 'y' to retry
if run_again == 'y':
continue
else:
return frame
答案 0 :(得分:0)
我想这个问题可能是由frame
的修改引起的。
在第一次运行时,frame[0]
具有被认为是old_ids
的东西。但是,在第二次运行中,它们已被替换,frame[0]
包含new_ids
。
在带有.map
的列上调用new_ids
时,找不到值(我们期望old_ids
),因此所有id似乎都丢失了。
作为修复,您可以将new_ids
计算为局部变量,而不用修改原始DataFrame。例如:
def main(frame):
while True:
playerlist = read_csv('PlayerList').fillna(0)
new_ids = frame.iloc[:,0].astype(float).map(dict(zip(playerlist['old_id'], playerlist['new_id'])))
missing = frame[new_ids.isnull()]
print(missing) #See which players have missing ID's
run_again = input('Run again? ') #Fix missing ID's in the excel file, then type 'y' to retry
if run_again == 'y':
continue
else:
return frame