python – 如何在字典为空时避免错误?
发布时间:2020-12-20 11:03:01 所属栏目:Python 来源:网络整理
导读:我有一个df,我需要将列标记为’1’如果我的.apply()中的行与我的字典中的项匹配.但是,如果我的字典为空或者不包含与该实例的.apply()中的行相同的“密钥”,则脚本将失败.我如何通过这个hickup进步? df = pd.DataFrame({'Key': ['10003','10003','10034'],'N
我有一个df,我需要将列标记为’1’如果我的.apply()中的行与我的字典中的项匹配.但是,如果我的字典为空或者不包含与该实例的.apply()中的行相同的“密钥”,则脚本将失败.我如何通过这个hickup进步?
df = pd.DataFrame({'Key': ['10003','10003','10034'],'Num1': [12,13,30,12,16],'Num2': [121,122,124,125,126,127],'admit': [2015019,20150124,20150206,20150211,20150220,20150407,20150211],'discharge': [20150123,20150202,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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |