【问题标题】:Suppress a Warning -python-pandas-colab_notebook抑制警告 -python-pandas-colab_notebook
【发布时间】:2019-10-05 18:24:00
【问题描述】:

我正在尝试规范化 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 值的警告。

【问题讨论】:

  • 为什么不将该函数应用于值不为空的列?我们可以看看你的功能吗?
  • 我在考虑那条路线,但我不知道该怎么做??如果我删除了空值,我以后将如何重新组合它们?上面的代码是我的实际代码,除了变量名。这是我的变量名的代码: ascent['country']= ascent["country"].apply(lambda x: coco.convert(names= x, to='ISO3', not_found= np.NaN))跨度>

标签: python python-3.x pandas warnings google-colaboratory


【解决方案1】:

我已经调整了数据框中的数据,以使 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

【讨论】:

  • 超级基本问题...这会无限期地过滤掉我的 NaN 吗?因为我想在使用此国家/地区转换器后对其进行估算。
  • 您的代码的问题似乎是您的“NaN”是字符串,而不是 numpy.nan。 np nan 是特殊的,作为空格处理。您的字符串 nan 看起来好像是国家/地区代码,因此当您查询国家/地区数据库时会出现错误。我认为。不确定这是否能回答您的问题?
  • 我觉得我没有正确理解您的问题,如果我之前的评论没有回答您的问题,您能否扩展您对 NaN 的需求?谢谢。
  • 所以我基本上只是想抑制警告让 country_converter 完成它并将所有无效的国家代码转换为 np.nans。我很抱歉我的“示例代码”被错误地编码为“NaN”而不是 np.nan(仍然是一个学习新手),但我只是想知道为什么我似乎无法抑制警告,即使我认为我正在输入正确。
  • 在国家/地区代码文档中有一个名为“处理缺失数据”的部分,大约在页面的一半here。
猜你喜欢
  • 1970-01-01
  • 2018-03-03
  • 2011-03-31
  • 2019-10-22
  • 2014-12-19
  • 2021-12-27
  • 1970-01-01
  • 2011-12-28
相关资源
最近更新 更多