Как отформатировать операторы If с несколькими условиями внутри функции - PullRequest
0 голосов
/ 30 июня 2019

Я работаю над созданием функции, которая будет оценивать два условия из фрейма данных и передавать серию предварительно возвращаемых значений с заданными входными данными в фрейм данных, если он встретит NaN.Первое условие, которое я хотел бы иметь, это проверка, является ли значение одного столбца NaN (очевидно), а затем проверка другого столбца, чтобы увидеть, какой ключ назначен идентификатору (1,2,3 и т. Д.),Конечная цель состоит в том, чтобы использовать метод .apply в функции, чтобы заполнить значения NaN значениями из функции обратно в исходный кадр данных или оставить существующие значения (если они есть) в покое.Меня зациклило то, что я впервые написал что-то вроде этого для вызова внутри фрейма данных, и у меня возникла проблема назначения в потоке управления.

Это использует python 3.6.Я попытался поиграть с несколькими формами ниже, но все последовательно выдает мне ту же ошибку типа, что и при попытке применить функцию к кадру данных.Это не фактический фрейм данных, но я быстро объяснил суть проблемы, с которой я столкнулся.

Очевидно, что в функции что-то отключено, но в результате мы бы в идеале обновили значение NaN значением 40

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

import pandas as pd
import numpy as np

frame = {'key' : [1,2,3,4,5],
    'height' : [70, 68, 74, 67, 72],
    'age' : [29,45,'N/A',51,34]}

frame = pd.DataFrame(frame)

frame.replace('N/A',np.nan)

def age (x):
    if (x['age'].isnull()) & (x['key'] == 3):
        return x.replace(np.nan, 40)
    else: 
        return x

result = frame.apply(age) 

Вот снимок кадра данных, который я хотел бы изменить

1 Ответ

0 голосов
/ 30 июня 2019

Решение вашей проблемы можно решить, как указано ниже, если вы действительно хотите использовать пользовательскую функцию и применить.

import pandas as pd
import numpy as np
import math

frame = {'key' : [1,2,3,4,5],
    'height' : [70, 68, 74, 67, 72],
    'age' : [29,45,'N/A',51,34]}

frame = pd.DataFrame(frame)

frame = frame.replace('N/A',np.nan)

#function modified to compare the numpy float value with nan, math library is used here
def age(row):
    if (math.isnan(row['age'])) & (row['key'] == 3):
        return row.replace(np.nan, 40)
    else: 
        return row

result = frame.apply(age, axis=1) #here axis=1 is passing single row at a time to the function

входной фрейм данных:

key height age
1   70     29.0
2   68     45.0
3   74     NaN
4   67     51.0
5   72     34.0

результирующий фрейм данных:

key     height  age
1.0     70.0    29.0
2.0     68.0    45.0
3.0     74.0    40.0
4.0     67.0    51.0
5.0     72.0    34.0

Надеюсь, это поможет вам, вы можете изменить функцию в соответствии с вашими требованиями и изменить тип данных столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...