Брось NaN, но не держи - PullRequest
       0

Брось NaN, но не держи

1 голос
/ 16 апреля 2020

Значения None и NaN указывают на одно и то же значение, но в моем фрейме данных я хотел бы сохранить строки со значениями None и удалить значения NaN.

Допустим, у меня есть следующий фрейм данных df.

df

Col_1   Col_2  Col3
None     None   None
1         2      3 
NaN       NaN    NaN

Когда я сбрасываю значения с помощью NaN, я бы хотел получить что-то подобное.

df.dropna()

Col_1  Col_2   Col_3
None    None    None 
1       2        3

Но он сбрасывает значения None и NaN.

Но чтобы сохранить значения None, я попытался заполнить другим значением что-то вроде

df['Col_1].replace({None: 'Empty'}, inplace=True)

это заполнение, включая значения NaN.

Мой вопрос: есть ли способ отбросить значения с помощью NaN и сохранить значения None.

Ответы [ 2 ]

2 голосов
/ 16 апреля 2020

Вы можете установить значения для строк и сравнить не равные NaN или nan s значения:

df = df[~df.astype(str).isin(['NaN', 'nan']).any(axis=1)]
print (df)
  Col_1 Col_2  Col3
0  None  None  None
1     1     2     3
1 голос
/ 16 апреля 2020

Что делает это немного хитрым, так это то, что pandas рассматривает None как NaN по большей части, делая isna или dropna неправильным подходом здесь, поскольку строки, содержащие None, также будут установлены на True. Что вы можете сделать, так это работать с базовыми массивами numpy, что позволяет сравнивать их с None:

df[((df.to_numpy() == None) | df.notna()).any(1)]

  Col_1 Col_2  Col3
0  None  None  None
1     1     2     3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...