Как перебрать DataFrame для выбранного кулона, используя python? - PullRequest
0 голосов
/ 10 февраля 2020

предположим, у меня есть пример кода, подобный этому

_d=pd.DataFrame([[1,2,3],[4,np.nan,6],[np.nan,np.nan,8]],columns=['x','y','z'])

Теперь у меня есть функция, которая проверяет значение и назначает желаемое значение в соответствии с scenerio

def handling_nan(_d):
    if _d['x']==1.0:
        return 100
    else:
        return _d

, когда я использую это, в моем коде ниже,

_result=_d.apply(lambda x:handling_nan(x))
_result

я получаю ошибку

KeyError: ('x', 'произошло в индексе x')

ОБНОВЛЕНИЕ A:

ну, короче, я использую набор данных от kaggle.com ie. Титани c: Машинное обучение по стихийным бедствиям , и в этом наборе данных я хочу ввести новый столбец с условием, похожим на это.

, если мужчина и возраст равны NaN, тогда укажите средний () возраст мужчин вместо NaN, а если женщина и возраст NaN, укажите средний () общий возраст женщин вместо NaN

1 Ответ

1 голос
/ 11 февраля 2020

KeyError встречается в функции, поскольку метод apply() в кадре данных предполагает axis=0. Это означает, что функция будет применяться к каждому столбцу, а не к каждой строке. Чтобы устранить эту ошибку, вызов apply() необходимо заменить следующим образом:

_result=_d.apply(lambda x:handling_nan(x), axis=1)

При рассмотрении редактирования вопрос состоит в том, чтобы заменить NaNs сгруппированными средствами в наборе данных.

Это можно сделать, используя метод fillna() и transform() следующим образом:


l = [["M", 30], ["M", 45], ["M", None], ["F", 76], ["F", 23], ["F", None]]
df = pd.DataFrame(l, columns=["sex", "age"])
df['age'] = df['age'].fillna(df.groupby("sex")['age'].transform('mean'))

Этот ответ имеет другие альтернативные решения.

Надеюсь, что это помогает.

...