对于大型数据集,更快地将列中的1和0替换为NAN

2024-10-03 21:32:04 发布

您现在位置:Python中文网/ 问答频道 /正文

“azdias”是一个数据框,它是我的主要数据集,元数据或其特征摘要位于数据框“feat_info”中。“feat_信息”显示每列中显示为NaN的值

Ex:column1的值[-1,0]为NaN值。因此,我的工作将是在第1列中找到并替换这些-1,0作为NaN

azdias数据帧: enter image description here

专长信息数据帧: enter image description here 我试着在jupyter笔记本中跟踪

def NAFunc(x, miss_unknown_list):
    x_output = x
    for i in miss_unknown_list:
        try:
            miss_unknown_value = float(i)
        except ValueError:
            miss_unknown_value = i
        if x == miss_unknown_value:
            x_output = np.nan
            break
    return x_output

for cols in azdias.columns.tolist():
    NAList = feat_info[feat_info.attribute == cols]['missing_or_unknown'].values[0]
    azdias[cols] = azdias[cols].apply(lambda x: NAFunc(x, NAList))

问题1:我试图估算NaN值。但是我的代码非常简单 缓慢的我希望加快我的执行过程

我已附上两个数据帧的示例:

阿兹迪亚斯样本

  AGER_TYP ALTERSKATEGORIE_GROB ANREDE_KZ CJT_GESAMTTYP FINANZ_MINIMALIST
0   -1          2                    1         2.0             3
1   -1          1                    2         5.0             1
2   -1          3                    2         3.0             1
3    2          4                    2         2.0             4
4   -1          3                    1         5.0             4

专长信息样本

attribute            information_level       type          missing_or_unknown           
AGER_TYP                     person       categorical            [-1,0]
ALTERSKATEGORIE_GROB         person       ordinal                [-1,0,9]
ANREDE_KZ                    person       categorical            [-1,0]
CJT_GESAMTTYP                person       categorical            [0]
FINANZ_MINIMALIST            person       ordinal                [-1]

Tags: 数据info信息outputvaluenanunknownperson
2条回答

如果azdias数据集是从read_csv或类似IO函数获取的,则na_values关键字参数可用于指定特定于列的缺失值表示形式,以确保返回的数据帧从一开始就具有适当的NaN值。示例代码如下所示

from ast import literal_eval

feat_info.set_index("attribute", inplace=True) 
# A more concise but less efficient alternative is
# na_dict = feat_info["missing_or_unknown"].apply(literal_eval).to_dict()
na_dict = {attr: literal_eval(val) for attr, val in feat_info["missing_or_unknown"].items()}
df_azdias = pd.read_csv("azidas.csv", na_values=na_dict)

对于数据类型,整数数据类型没有内置的NaN表示。因此需要浮点数据类型。如果使用fillna填充缺少的值,则可以指定downcast参数以使返回的序列或数据帧具有适当的数据类型

尝试使用DataFrame的^{}方法。这个怎么样

for c in azdias.columns.tolist():
    replace_list = feat_info[feat_info['attribute'] == c]['missing_or_unknown'].values
    azidias[c] = azidias[c].replace(to_replace=list(replace_list), value=np.nan)

在无法执行代码的情况下,有几件事我不确定:

  1. 在您的示例中,使用了.values[0]。你不想要所有的值吗
  2. 我不确定是否有必要做to_replace=list(replace_list),只使用to_replace=replace_list可能有效

总的来说,我建议你自己想一想“熊猫肯定有为我做这件事的功能。”通常,它们是这样做的。对于熊猫的表演,一般避免循环和设置东西。矢量化方法往往要快得多

相关问题 更多 >