gpt4 book ai didi

python - 在数字列的新列中捕获 NA 的存在

转载 作者:行者123 更新时间:2023-12-04 08:23:42 24 4
gpt4 key购买 nike

我有一个要运行决策树建模的数据集。然而,数据集在数字和分类列中都有 NA。
对于分类列,我的解决方案很简单,我在整个分类列列表中使用了带有 dummy_na=True 的虚拟编码。我的所有专栏的名称中都有 _CAT,因此它们很容易被捕获。

#get list of cat columns
cat_cols = [col for col in df5.columns if '_CAT' in col]
#dummy encode and capture NA presence
df_new = pd.get_dummies(df_old,dummy_na=True, columns = cat_cols )
问题在于数字列:我无法将均值/中位数归入 NA,因为数据的缺失背后是有意义的。我不能归为 0,因为它是列的有效值。我可以输入一些像 -9999999.9 这样时髦的东西,因为它是一个很大的异常值,它可能会将 NA 与其他数字数据区分开来。
但我想知道是否有某种方法可以轻松地为每个数字列创建一个列,该列将具有二进制 1 或 0 指示符,以显示该数字列的行中是否有 NA。
所以如果我有这个:
  ID Value1_X Class Value2_X
0 1 33 Y 0.01
1 2 101 N 0.05
2 3 25 N NaN
3 4 245 N NaN
4 5 NaN N 0.61
5 6 30000 Y 2.3
变成这样:
  ID Value1_X  Value1_NA Class Value2_X  Value2_NA
0 1 33 0 Y 0.01 0
1 2 101 0 N 0.05 0
2 3 25 0 N NaN 1
3 4 245 0 N NaN 1
4 5 NaN 1 N 0.61 0
5 6 30000 0 Y 2.3 0
此外,我所有的数字列的名称中都有 _NUM。有没有办法自动创建名称中带有 _NUM 的所有列的 NA 指标列,就像我可以为分类列做的那样?如果 NA 指标列名称可以在某种程度上匹配数字列名称,就像它们在上面的示例中所做的那样?
重新创建上述样本的数据:
data2 = [['1', 33,'Y',0.01], ['2', 101,'N',0.05],
['3', 25,'N',np.nan],['4', 245,'N',np.nan],
['5',np.nan ,'N',0.61], ['6', 30000,'Y',2.3]]

df2 = pd.DataFrame(data2, columns = ['ID', 'Value1_X','Class','Value2_X'])

data3 = [['1', 33,0,'Y',0.01,0],
['2', 101,0,'N',0.05,0],
['3', 25,0,'N','NaN',1],
['4', 245,0,'N','NaN',1],
['5','NaN',1 ,'N',0.61,0],
['6', 30000,0,'Y',2.3,0]]

df3 = pd.DataFrame(data3, columns = ['ID', 'Value1_X','Value1_NA','Class','Value2_X','Value2_NA'])

最佳答案

进口

import numpy as np
import pandas as pd
import math
data2 = [['1', 33,'Y',0.01], ['2', 101,'N',0.05],
['3', 25,'N',np.nan],['4', 245,'N',np.nan],
['5',np.nan ,'N',0.61], ['6', 30000,'Y',2.3]]

df2 = pd.DataFrame(data2, columns = ['ID', 'Value1_X','Class','Value2_X'])

检查器功能
def func(x):
if(math.isnan(x)):
return 0;
else:
return 1;
函数调用
df2["value_1X_B"]=df2["Value1_X"].apply(func)
输出
    ID  Value1_X    Class   Value2_X    value_1X_B
0 1 33.0 Y 0.01 1
1 2 101.0 N 0.05 1
2 3 25.0 N NaN 1
3 4 245.0 N NaN 1
4 5 NaN N 0.61 0

关于python - 在数字列的新列中捕获 NA 的存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65376317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com