python - 使用条件语句处理 Pandas 中的 NaN 值

标签 python pandas

我正在处理一些客户邮政编码数据无效的数据。因此,我无法将 CountryISOCode 映射到他们的邮政编码,从而导致 NaN。但是,我注意到对于所有带有 NaN 的 CountryISOCodes,CurrencyCode 可以为我提供足够的信息来暂时解决问题。

我已经阅读了各种 Stackoverflow 文章,但找不到解决我的问题的方法。我试过了...

def func(row):
    if row['CountryISOCode'] == np.nan & row['Currency'] == 'EUR':
        return 'IRE'
elif row['CountryISOCode'] == np.nan & row['Currency'] == 'GBP':
    return 'GBR'
else:
    return row['CountryISOCode']

df['CountryISOCode'] = df.apply(func, axis=1)

还有一些其他的方法都没有用...

下面我提供了我正在使用的数据的副本

import pandas as pd
import numpy as np

data = [
    ['Steve', 'Invalid Postcode', 'GBP', np.nan ],
    ['Robyn', 'Invalid Postcode', 'EUR', np.nan],
    ['James', 'Valid Postcode', 'GBP', 'GBR'],
    ['Halo', 'Invalid Postcode', 'EUR', np.nan],
    ['Jesus', 'Valid Postcode', 'GBP', 'GBR']
    ]

df = pd.DataFrame(columns=["Name", "PostCode", "CurrencyCode", "CountryISOCode"], data=data)

基本上,如果我使用 SQL,我的代码将如下所示。

IF countryISOCode IS NULL 
    AND currency = ‘GBP’ 
THEN CountryISOCode =  ‘GBR’
ELSE
IF countryISOCode IS NULL 
    AND currency = ‘EUR 
THEN CountryISOCode =  ‘IRE’
ELSE countryISOCode 
END

有什么想法吗?

最佳答案

我添加这个答案是因为它增加了原始问题的值(value)。比较语句不起作用的原因是 np.nan == np.nan 不起作用。您可以检查 NaN 元素的身份,但不能检查是否相等。参见 in operator, float("NaN") and np.nan了解更多详情。话虽如此,这就是您可以转换原始代码以使其按预期工作的方式。

import pandas as pd                                                                                                                                    
import numpy as np

raw_data = [
    ['Steve', 'Invalid Postcode', 'GBP', np.nan ],
    ['Robyn', 'Invalid Postcode', 'EUR', np.nan],
    ['James', 'Valid Postcode', 'GBP', 'GBR'],
    ['Halo', 'Invalid Postcode', 'EUR', np.nan],
    ['Jesus', 'Valid Postcode', 'GBP', 'GBR']
    ]

df = pd.DataFrame(columns=["Name", "PostCode", "Currency", "CountryISOCode"], data=raw_data)

def func(row):
    if row['CountryISOCode'] is np.nan and row['Currency'] == 'EUR':
        return 'IRE'
    elif row['CountryISOCode'] is np.nan and row['Currency'] == 'GBP':
        return 'GBR'
    else:
        return row['CountryISOCode']

df['CountryISOCode'] = df.apply(func, axis=1)

print(df)

但是,其他答案也很棒。

关于python - 使用条件语句处理 Pandas 中的 NaN 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54424041/

相关文章:

python - 使用 pandas 为具有特定条件的每一行设置列值

python - 在 Pandas 中组合系列

python - pandas:如何通过与另一个面板合并来沿短轴延伸

python - 使用 apply 函数在 pandas 中创建一个具有舍入值的新列

python - 如何解压mongo日志文件

python - 我想删除以下字符串 "Production and nonsupervisory employees\r\n\n\n"之后的所有内容

python - 如何在Python中获取非数值数据的摘要

python - Python 中的线程

python - 将python函数添加到c++程序

python - 每当 matplotlib 中两条线相遇时,如何使用 Python 打印某些内容?