首页 > 解决方案 > 有没有办法识别浮动 NaN,然后​​在 pandas 数据框中替换它们?

问题描述

我试图在我的数据框中识别 NaN,后来删除了它们,因为它们对于这个特定问题不是必需的。虽然现在在执行另一个操作时,我遇到了一个叫做“floating NaN”的东西,因此我无法执行这个操作。

transaction id
54789
56334
56233
58789
C57832
C53347
C58963
C58797

我正在执行的操作涉及识别该列中的整数和字符串,并添加一个新列,如果是整数,则该列将具有“Ordered”,如果是字符串则具有“Cancelled”。对于此操作,我使用了以下代码。

data_clean['transaction status'] = data_clean['transaction id'].str.isnumeric().astype(int)

上面的代码行会给我的输出为

  transaction id  transaction status
0         654656                   1
1         546466                   1
2         654646                   1
3         844886                   1
4        C846464                   0
5        C384448                   0
6        C468788                   0
7        C873316                   0

对于这行代码,我收到以下错误。

cannot convert float NaN to integer

直到此时我才知道浮动 NaN 直到此时才存在。我如何检测它们?我第一次尝试跑步

data_clean['trasaction id'].isnull().any()

它来了

False

如果上面的代码行无法检测到,我如何找到这样的浮动 NaN?

标签: pythonpython-3.xpandasdataframe

解决方案


这应该做你需要的:

data_clean['transaction status'] = pd.notna(pd.to_numeric(data_clean['transaction id', errors='coerce')).astype(int)

首先,pd.to_numeric将列转换为数字格式。因为当事务被取消时,行中有字符串,所以这些字符串会作为错误被拾取。设置errors=coerce将为您提供这些行的 NaN。

其次,使用pd.notna,NaN 设置为 False,数字设置为 True。

第三,astype(int)将 True/False 转换为 1/0。


推荐阅读