python - метка отсутствует в [index] - PullRequest
0 голосов
/ 06 октября 2018

Я использовал цикл for для создания функции, которая, просматривая значение направления в каждой строке, возвращала направление на основе условий.Я разделил весь набор данных на две части.Я использую:

def dir_func(df):
for i in df.index:
    if df.loc[i,'dir_1'] == ['E' or 'NE' or 'SE']:
        df.loc[i,'dir_fin'] = 'E'
    elif df.loc[i,'dir_1'] == ['W' or 'NW' or 'SW']:
        df.loc[i,'dir_fin'] = 'W'
    else:
        if df.loc[i,'dir_2'] == ['E' or 'NE' or 'SE']:
            df.loc[i,'dir_fin'] = 'E' 
        elif df.loc[i,'dir_2'] == ['W' or 'NW' or 'SW']:
            df.loc[i,'dir_fin'] = 'W'
        else:
            if (pd.Series(df.loc[i,'loc_01']).str.contains(
                ("\sEB\s" or "\sEast\s" or "\sEastbound" or "\sE\s"),case=False) \
            | pd.Series(speed_overspeed.loc[i,'loc_02']).str.contains(
                ("\sEB\s" or "\sEast\s" or "\sEastbound" or "\sE\s"),case=False)).bool()==True:
                df.loc[i,'dir_fin'] = 'E' 
            elif (pd.Series(df.loc[i,'loc_01']).str.contains(
                ("\sWB\s" or "\sWest\s" or "\sWestbound" or "\sW\s"),case=False) \
            | pd.Series(speed_overspeed.loc[i,'loc_02']).str.contains(
                ("\sWB\s" or "\sWest\s" or "\sWestbound" or "\sW\s"),case=False)).bool()==True:
                df.loc[i,'dir_fin'] = 'W' 
            else:
                df.loc[i,'dir_fin'] = 'NA'

для итерации.

Эта функция хорошо работает для моего первого расщепленного набора данных, но когда я пытаюсь применить его ко второму набору данных, он возвращает:

KeyError: 'метка [891] отсутствует в [index]'

Однако, когда я посмотрел на значение # 891, он фактически возвращает строку со значениями.

Интересно, сможет ли кто-нибудь помочь мне с этой проблемой, и я буду очень признателен.

Большое спасибо!

1 Ответ

0 голосов
/ 06 октября 2018

Я думаю, вы должны понимать (в python 3.x), что результаты

df.loc[i,'dir_1'] == ('E' or 'NE' or 'SE')

всегда будут False, если только df.loc [i, 'dir_1'] фактически равен 'E'

Таким образом, операторы if должны быть изменены на что-то вроде

 if df.loc[i,'dir_1'] in ['E', 'NE', 'SE']:

Аналогично, вы можете использовать in в последнем операторе сравнения.

Тогда конечная функция будет:

def dir_func(df):
for i in df.index:
    if df.loc[i,'dir_1'] in ['E', 'NE', 'SE']:
        df.loc[i,'dir_fin'] = 'E'
    elif df.loc[i,'dir_1'] in ['W', 'NW', 'SW']:
        df.loc[i,'dir_fin'] = 'W'
    else:
        if df.loc[i,'dir_2'] in ['E', 'NE', 'SE']:
            df.loc[i,'dir_fin'] = 'E' 
        elif df.loc[i,'dir_2'] in ['W', 'NW', 'SW']:
            df.loc[i,'dir_fin'] = 'W'
        else:
            if (df.loc[i,'loc_01'].lower() in ("\seb\s", "\seast\s", "\seastbound", "\se\s")) or (speed_overspeed.loc[i,'loc_02'] in ("\seb\s", "\seast\s", "\seastbound", "\se\s")):
                df.loc[i,'dir_fin'] = 'E' 
            elif (df.loc[i,'loc_01'].lower() in ("\swb\s", "\swest\s", "\swestbound", "\sw\s")) or (speed_overspeed.loc[i,'loc_02'] in ("\swb\s", "\swest\s", "\swestbound", "\sw\s")):
                df.loc[i,'dir_fin'] = 'W' 
            else:
                df.loc[i,'dir_fin'] = 'NA'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...