Модуль Python: Pandas - вложенный оператор IF, который заполняет NaN (пустые значения) в кадре данных - PullRequest
0 голосов
/ 07 ноября 2018

Я создал функцию, которая проверяет несколько операторов IF, учитывая данные в столбце «Имя».

Критерии 1: если «Имя» пусто, вернуть «Secondary_Name». Однако, если «Secondary_Name» также пусто, вернуть «Third_Name».

Критерии 2: если «Имя» == «ОБЩИЕ», вернуть «Secondary_Name». Однако, если «Secondary_Name» также пустое, вернуть «Third_Name»

Остальное: вернуть «Имя»

def account_name(row):
    if row['Name'] == None and row['Secondary_Name'] == None:
        return row['Third_Name']

    elif row['Name'] == 'GENERAL':
        if row['Secondary_Name'] == None:
            return row['Third_Name']

    else:
        return row['Name']

Я пробовал == Нет, == np.NaN, == Null, .isnull (), == '', == '0'.

Ничто не может заменить пустые значения тем, что я хочу.

Редактировать:

Пример DF

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Считайте, что это DF

df = pd.DataFrame({'Name':['a', 'GENERAL', None],'Secondary_Name':['e','f',None], 'Third_Name':['x', 'y', 'z']})

    Name    Secondary_Name  Third_Name
0   a       e               x
1   GENERAL f               y
2   None    None            z

Поскольку вы пишете функцию на Python, вы можете использовать None

def account_name(row):

    if (row['Name'] is None or row['Name'] == 'GENERAL') and (row['Secondary_Name'] is None):
        return row['Third_Name']

    elif row['Name'] is None or row['Name'] == 'GENERAL':
        return row['Secondary_Name']

    else:
        return row['Name']

df['Name'] = df.apply(account_name, axis = 1)

Вы получаете

    Name    Secondary_Name  Third_Name
0   a       e               x
1   f       f               y
2   z       None            z

Вы можете получить тот же вывод, используя панды и вложенные np.where

cond1 = (df['Name'].isnull()) | (df['Name'] == 'GENERAL')
cond2 = (cond1) & (df['Secondary_Name'].isnull())
np.where(cond2, df['Third_Name'], np.where(cond1, df['Secondary_Name'], df['Name']))
0 голосов
/ 07 ноября 2018

В зависимости от типа d столбца, NULL не могут хорошо взаимодействовать с NaN по любой причине. Ничто не будет означать, что поле пустое, а это не так, поскольку у вас есть «значение» для данного типа d.

Простой способ убедиться в том, что вы можете идентифицировать NaN, состоит в том, чтобы увидеть, равно ли поле само по себе

def isNaN(value):
if value != value: 
    return True
else:
    return False

И привести пример:

df = pd.DataFrame(data={'ClientId':[1,2,3,4] , 'SomeNULLs':['main','main',None,None], 'NewNULLs':[1,None,0,1]})

df['Test'] = df.NewNULLs.apply(isNaN)

Полученный набор данных должен быть

   ClientId SomeNULLs  NewNULLs   Test
0         1      main       1.0  False
1         2      main       NaN   True
2         3      None       0.0  False
3         4      None       1.0  False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...