Как вызвать работника службы & ldquo; Push & rdquo; Веб-уведомление нажатием кнопки

Если вы измените dtype на np.object, чтобы он поддерживал смешанные dtypes и явно проверяли на False, тогда это работает:

In[200]:
df = pd.DataFrame({'b':[False,True,False,True,False]})
df['b'] = df['b'].astype(np.object)
# changes all False values to NaN
df.loc[df['b']==False, 'b'] = np.nan
df

Out[200]: 
      b
0   NaN
1  True
2   NaN
3  True
4   NaN

Если вы попытались сделать df.loc[~df['b'],'b']=np.nan то это вызывает ошибку:

KeyError: '[-1 -2 -1 -2 -1] not in index'

, если вы печатаете тип, тогда это показывает, что значения действительно являются float и bool:

print(type(df['b'].iloc[0]))
print(type(df['b'].iloc[1]))
<class 'float'>
<class 'bool'>

Как отмечено в другие ответы bool не могут представлять NaN, только float dtype может, поэтому pandas преобразует значение dtype в Series в наиболее совместимый тип, который в этом случае float. Если вы установите для параметра dtype значение np.object, это позволяет использовать гетерогенный dtype, поэтому нет преобразования dtype.

UPDATE

Как отмечено в комментариях, использование смешанные типы будут сильно влиять на производительность и хранение, если у вас должны быть смешанные типы, тогда это единственный способ, которым это будет работать. В противном случае у вас может быть дополнительный столбец, чтобы просто пометить строки, которые NaN, как было предложено.

0
задан kairi 19 January 2019 в 10:20
поделиться