如何防止嵌套循环中Pandas系列的索引错误?

2024-04-24 01:02:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个嵌套循环。在外循环中,我遍历的键比内循环中的dataframe[key]多。导致索引错误(在数据帧[key]中找不到key)。 我需要一种方法来检查钥匙是否匹配。你知道吗

f.e.仅关键列:

dfKeys                    dataframe
-------                   --------
 key                         key
  1                           1
  1                           3
  3                           5
  3                           9
  3
  4
  4
  5
  5
  5
  5
  8
  8
  9
  9
  9 

grouped=dfKeys.groupby('key')
for key, group in grouped:
    if ((group.someCol=='someVal').any() or ~(group.someCol.isin(someArray).any())):
        if(key in dataframe['key']): #######this did not solve it, always false (but there have to be some matches) 
            foundIndex=dataframe[dataframe['key']==key].index.values.astype(int)[0] #INDEXERROR after some loops if there is no 'if' above
            dataframe.loc[foundIndex,'myCol']='myVal'

dataframe['key']的类型是熊猫系列。你知道吗


Tags: 数据keyindataframeif错误groupany
2条回答

不是很优雅,但我可以尝试一下

grouped=dfKeys.groupby('key')
for key, group in grouped:
    if ((group.someCol=='someVal').any() or ~(group.someCol.isin(someArray).any())):
        try: 
            foundIndex=dataframe[dataframe['key']==key].index.values.astype(int)[0] 
            dataframe.loc[foundIndex,'myCol']='myVal'
        except IndexError: print('key not found, continue')

如果是循环使用的列表,则可以检查索引是否在列表长度内:

if key < len(list):

如果是字典,您可以检查密钥是否存在:

if key in dict:

如果要从dict中获取一个键(如果存在),如果不存在则返回一个默认值,那么可以使用dict.get()

value = dict.get(key, default)

编辑:

根据文件熊猫系列,可以使用Series.get()方法获取给定键的项。与dict.get()一样,如果找不到键,可以指定要返回的默认值:

if mySeries.get(myKey, 'default') != 'default':
    #This code will only run if it found `myKey` in `mySeries`

那个熊猫系列文件:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.get.html#pandas.Series.get

相关问题 更多 >