Python 对于大型数据集,更快地将列中的-1和0替换为NAN
“azdias”是一个数据框,它是我的主要数据集,元数据或其特征摘要位于数据框“feat_info”中。“feat_信息”显示每列中显示为NaN的值 Ex:column1的值[-1,0]为NaN值。因此,我的工作将是在第1列中找到并替换这些-1,0作为NaN azdias数据帧: 专长信息数据帧: 我试着在jupyter笔记本中跟踪Python 对于大型数据集,更快地将列中的-1和0替换为NAN,python,pandas,jupyter-notebook,Python,Pandas,Jupyter Notebook,“azdias”是一个数据框,它是我的主要数据集,元数据或其特征摘要位于数据框“feat_info”中。“feat_信息”显示每列中显示为NaN的值 Ex:column1的值[-1,0]为NaN值。因此,我的工作将是在第1列中找到并替换这些-1,0作为NaN azdias数据帧: 专长信息数据帧: 我试着在jupyter笔记本中跟踪 def NAFunc(x, miss_unknown_list): x_output = x for i in miss_unknown_list
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]
尝试使用DataFrame的方法。这个怎么样
azdias.columns.tolist()中的c的
替换\u列表=专长信息[专长信息['attribute']==c]['missing\u或\u unknown']
azidias[c]=azidias[c].replace(to_replace=list(replace_list),value=np.nan)
在无法执行代码的情况下,有几件事我不确定:
.values[0]
。你不想要所有的值吗to_replace=list(replace_list)
,只需使用to_replace=replace_list
替换\u列表=专长信息[专长信息['attribute']==c]['missing\u或\u unknown']
azidias[c]=azidias[c].replace(to_replace=list(replace_list),value=np.nan)
在无法执行代码的情况下,有几件事我不确定:
.values[0]
。你不想要所有的值吗to_replace=list(replace_list)
,只需使用to_replace=replace_list
总的来说,我建议你自己想一想“熊猫肯定有为我做这件事的功能。”通常,它们是这样做的。对于熊猫的表演,一般避免循环和设置东西。矢量化方法往往更快。如果从
read\u csv
或类似IO函数获取azdias
数据集,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
参数,以使返回的序列或数据帧具有适当的数据类型。如果azdias
数据集是从读取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
参数,以使返回的序列或数据帧具有适当的数据类型。Hi@blthayer。谢谢你的回复。我仅从表示NaN的feat_信息中提取特定列的值。因此我取值[0]。例如:对于AGER_类型,它将获取列表[-1,0],而且缺失的_或未知的_的值是字符串格式,需要首先转换以匹配列的数据类型。因此,使用来代替向我抛出一个错误。@KaustubhUrsekar-至于你的第一条评论:明白。至于您的第二条评论:在调用替换之前,请尝试在缺少的\u或\u未知的
数组上使用,将它们转换为正确的类型。请注意,atype
是numpy.ndarray
的一种方法,因此在我上面的代码中,您需要在调用list(replace_list)
hi brother!!我已附上文本文件作为示例,以帮助您尝试在您的身边!:)兄弟,我需要浮点数,但问题是当我扫描专长信息的数据帧时。我也认为“Xx”代表南。因此,我无法将它们转换为一种数据类型。因此,我通过阅读文档在代码中编写了try和except函数。但是,我非常关注函数执行转换和插补NaN所消耗的时间。总行数约为890000行。Hi@blthayer。谢谢你的回复。我仅从表示NaN的feat_信息中提取特定列的值。因此我取值[0]。例如:对于AGER_类型,它将获取列表[-1,0],而且缺失的_或未知的_的值是字符串格式,需要首先转换以匹配列的数据类型。因此,使用来代替向我抛出一个错误。@KaustubhUrsekar-至于你的第一条评论:明白。至于您的第二条评论:在调用替换之前,请尝试在缺少的\u或\u未知的
数组上使用,将它们转换为正确的类型。请注意,atype
是numpy.ndarray
的一种方法,因此在我上面的代码中,您需要在调用list(replace_list)
hi brother!!我已附上文本文件作为示例,以帮助您尝试在您的身边!:)兄弟,我需要浮点数,但问题是当我扫描专长信息的数据帧时。我也认为“Xx”代表南。因此,我无法将它们转换为一种数据类型。因此,我通过阅读文档在代码中编写了try和except函数