使用循环有条件地重试脚本

时间:2019-04-28 21:59:22

标签: python pandas

我有一个简单的脚本,该脚本读取播放器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

1 个答案:

答案 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