Подавить предупреждение -python-pandas-colab_notebook - PullRequest
0 голосов
/ 19 мая 2019

Я пытаюсь нормализовать трехзначный столбец кода страны в pandas df.Я нашел отличную функцию с именем country_converter, и сейчас я запускаю эту функцию в столбце страны в очень большом фрейме данных.Он возвращает тысячи этих предупреждений, поскольку в столбце присутствует NaN значения.

ПРЕДУПРЕЖДЕНИЕ: root: nan не найден в ISO3

Я ищу две вещи:

  1. , чтобы конкретно подавить предупреждения nan *
  2. , чтобы ускорить время обработки этой функции (моя мысль - подавление предупреждений, которые должны ускоритьпроцесс, однако, если у вас есть какие-либо предложения о том, чтобы попробовать что-то другое с моим кодом, это было бы здорово!

Я перепробовал все варианты названия, но, похоже, ничего не работает, так что я думаю, что 'м чего-то не хватает ...

import country_converter as coco
import pandas as pd
import numpy as np
import warnings

warnings.filterwarnings("ignore", message= "nan not found in ISO3")
warnings.filterwarnings("ignore", message= "root:nan not found in ISO3")
warnings.filterwarnings("ignore", message= "WARNING:root:nan not found in ISO3")

test = pd.DataFrame({"code":[np.nan, 'XXX', 'USA', 'GBR', "GBR",'SWE/n', "123", "abs", "ABCC", "ABC", np.nan, np.nan]})


test['code_convert']= test["code"].apply(lambda x: coco.convert(names= x, to='ISO3', not_found= np.NaN))

Ожидается, что больше не будет предупреждений со значением nan.

1 Ответ

1 голос
/ 19 мая 2019

Я изменил ваши данные в вашем фрейме данных, чтобы np.nan соответствовал np.nan, а не строкам.

test = pd.DataFrame(
    {
        "code": [
            np.nan,
            "XXX",
            "USA",
            "GBR",
            "GBR",
            "SWE/n",
            "123",
            "abs",
            "ABCC",
            "ABC",
            np.nan,
            np.nan,
        ]
    }
)

print(test)

     code
0     NaN
1     XXX
2     USA
3     GBR
4     GBR
5   SWE/n
6     123
7     abs
8    ABCC
9     ABC
10    NaN
11    NaN

Тогда все, что вам нужно сделать, это отфильтровать np.nan при выполнении ваших расчетов.

test["code_convert"] = test[test.notna()].apply(
    lambda x: coco.convert(names=x, to="ISO3")
)

У меня не установлен конвертер страны, но если я упросту, применить к тесту:

test["code_convert"] = test[test.notna()].apply(
    lambda x: x + "_solution"
)

print(test)

     code    code_convert
0     NaN             NaN
1     XXX    XXX_solution
2     USA    USA_solution
3     GBR    GBR_solution
4     GBR    GBR_solution
5   SWE/n  SWE/n_solution
6     123    123_solution
7     abs    abs_solution
8    ABCC   ABCC_solution
9     ABC    ABC_solution
10    NaN             NaN
11    NaN             NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...