2016-01-18 4 views
3

У меня есть столбец «Возраст», но иногда отображаются значения NaN. Я знаю, что для этой цели я могу использовать «fillna», но я попытался определить свою собственную функцию (и научиться делать это) и использовать applymap для dataframeзамена нулевых значений в кадре данных Pandas с использованием applymap

пока не удалось.

Age 
69 
49 
NaN 
54 
NaN 

Я попытался

def get_rid_of_nulls(value): 
    if value == np.nan: 
     return 'Is Null value' 
    else: 
     return value 

с этим не работает либо

if value == None 
    if value isnull 
    if value == np.na 
    if value =='' 
    if value == NaN 
    if value == 'NaN' 

Ни одно из сравнений не похоже на работу. Я не так точно, но я застрял, и я очень упрям, чтобы использовать fillna

благодаря

+0

Ничто не равно «нан», даже самому «нану». Вам нужно использовать специальную функцию, чтобы проверить, является ли значение 'nan', вы не можете использовать' == '. –

+0

use 'pd.isnull (value)' в вашей func – EdChum

ответ

2

Как есть «замена» в заголовке, и вы упомянули fillna, но не в replace(), вы также можете получить тот же результат, что-то вроде этого:

df.Age.replace(np.NaN, 'Is Null value', inplace=True) 

# Or, depending on your needs: 
df['Age'] = df.Age.replace(np.NaN, 'Is Null value') 

# Or without `replace` : 
df['Age'] = df.Age.apply(lambda x: x if not pd.isnull(x) else 'Is Null value') 
+0

Нет, это не сработает 'NaN' по сути не может быть проверен на равенство значений, только ваш последний фрагмент кода будет работать – EdChum

+0

Я тестировал его перед публикацией, он отлично работает. – mgc

+0

ОК, у меня плохо проходила строка 'np.NaN', которая не то же самое – EdChum

1

Вы можете использовать pd.isnull():

In [4]: 
def get_rid_of_nulls(value): 
    if pd.isnull(value): 
     return 'Is Null value' 
    else: 
     return value 

df['Age'].apply(get_rid_of_nulls) 

Out[4]: 
0    69 
1    49 
2 Is Null value 
3    54 
4 Is Null value 
Name: Age, dtype: object 

Аналогично вы можете использовать свойство, которое делает NaN не равен себе:

In [5]: 
def get_rid_of_nulls(value): 
    if value != value: 
     return 'Is Null value' 
    else: 
     return value 

df['Age'].apply(get_rid_of_nulls) 

Out[5]: 
0    69 
1    49 
2 Is Null value 
3    54 
4 Is Null value 
Name: Age, dtype: object 
+0

это вся точка .fillna - используя .apply таким образом (со встроенной проверкой isnull полностью не работает) и намного больше кода – Jeff

+0

@jeff op знает о fillna, и этот подход немой, я согласен. Я предполагаю, что операционная система просто хотела узнать, почему их подход не работает, а не искать наиболее эффективный метод. – EdChum

+0

ok sure - всегда нравится указывать, что применение - последний инструмент для перехода на – Jeff

Смежные вопросы