加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读