python – 如何在字典为空时避免错误?

我有一个df,我需要将列标记为’1’如果我的.apply()中的行与我的字典中的项匹配.但是,如果我的字典为空或者不包含与该实例的.apply()中的行相同的“密钥”,则脚本将失败.我如何通过这个hickup进步?

df =  pd.DataFrame({'Key': ['10003', '10003', '10003', '10003', '10003','10003','10034'], 
               'Num1': [12,13,30,12,13,13,16],
               'Num2': [121,122,122,124,125,126,127],
              'admit': [2015019, 20150124, 20150206,20150211,20150220,20150407,20150211],
          'discharge': [20150123, 20150202, 20150211,20150220,20150304,20150410,20150211]})
df['admit'] = pd.to_datetime(df['admit'], format='%Y%m%d')
df['discharge'] = pd.to_datetime(df['discharge'], format='%Y%m%d')
#df=df.head(5)

脚本:

d2 = df[df['discharge'].isin(range(30,40))].groupby('Key')['discharge'].apply(set).to_dict()

def find(x):
    match2 = x['admit'] in d2[x['Key']]
    return match2

df['flag'] = df.apply(find, axis=1).astype(int)

特别是,我需要标记一列,其中一行的许可日期等于另一行的排放日期.具有匹配排放日期的行在Num1中的值在30-40之间.如果将df减少到仅5行df = df.head(5),此脚本将按预期工作.但是当有些行的’Key’不在字典中时,脚本会返回错误.我想知道如果为字典添加所有“关键”和空白日期会使这个工作吗?

KeyError: ('10034', 'occurred at index 6')

我想使用字典来执行上述任务,因为我的函数的其余部分具有与此类似的条件(那些更简单).上面的代码可以在一个小样本上运行,但我的字典经验很少,这让我很难过.对不起,如果这是一个简单而愚蠢的问题.

最终df:

    Key    Num1 Num2    admit   discharge   flag
0   10003   12  121 2015-01-09  2015-01-23  0
1   10003   13  122 2015-01-24  2015-02-02  0
2   10003   30  122 2015-02-06  2015-02-11  0
3   10003   12  124 2015-02-11  2015-02-20  1
4   10003   13  125 2015-02-20  2015-03-04  0
5   10003   13  126 2015-04-07  2015-04-10  0
6   10034   16  127 2015-02-11  2015-02-11  0

最佳答案 您可以使用dict.get并返回一个空列表.

例如:

def find(x):
    match2 = x['admit'] in d2.get(x['Key'], [])
    return match2
点赞