我希望这条消息能找到你。由于分类变量是大类型的,所以我一直试图将分类变量映射到它们相应的值。但是,由于错误,它们没有被正确地映射。我的分类变量如下:#从现在起,我们已经去掉了空值。我们会处理分类栏
df["material_spec"].unique()
array(['Material_1', 'Material_0', 'Material_2', 'Material_3',
'Material_4', 'Material_5', 'Material_6', 'Material_7',
'Material_8', 'Material_9', 'Material_10', 'Material_11',
'Material_12', 'Material_13', 'Material_14', 'Material_15',
'Material_16', 'Material_17', 'Material_18', 'Material_19',
'Material_20', 'Material_21', 'Material_22', 'Material_23',
'Material_24', 'Material_25', 'Material_26', 'Material_27',
'Material_29', 'Material_30', 'Material_31', 'Material_32',
'Material_33', 'Material_34', 'Material_35', 'Material_36',
'Material_37', 'Material_38', 'Material_39', 'Material_40',
'Material_42', 'Material_43', 'Material_44', 'Material_45',
'Material_47', 'Material_48'], dtype=object)要映射的代码如下:
d = dict()
for i in range(len(df["material_spec"].unique())):
d.update({f'Material_{i}':i})由此产生的产出如下:
{'Material_0': 0, 'Material_1': 1, 'Material_2': 2, 'Material_3': 3, 'Material_4': 4, 'Material_5': 5, 'Material_6': 6, 'Material_7': 7, 'Material_8': 8, 'Material_9': 9, 'Material_10': 10, 'Material_11': 11, 'Material_12': 12, 'Material_13': 13, 'Material_14': 14, 'Material_15': 15, 'Material_16': 16, 'Material_17': 17, 'Material_18': 18, 'Material_19': 19, 'Material_20': 20, 'Material_21': 21, 'Material_22': 22, 'Material_23': 23, 'Material_24': 24, 'Material_25': 25, 'Material_26': 26, 'Material_27': 27, 'Material_28': 28, 'Material_29': 29, 'Material_30': 30, 'Material_31': 31, 'Material_32': 32, 'Material_33': 33, 'Material_34': 34, 'Material_35': 35, 'Material_36': 36, 'Material_37': 37, 'Material_38': 38, 'Material_39': 39, 'Material_40': 40, 'Material_41': 41, 'Material_42': 42, 'Material_43': 43, 'Material_44': 44}它遗漏了45,47和48的最后三个变量。我知道当我使用len(material_spec)时,总数为44,这就是为什么它只映射到44个变量,但是有什么方法可以进一步改进它。谢谢!
发布于 2022-05-25 00:46:32
您的唯一Material_数组与您正在索引的事实之间存在不一致,并且假设范围中的所有数字都存在于您的唯一数组中。您的df["material_spec"].unique()输出缺少Material_ 28、41和46。然后,根据长度进行索引,假设它们都是数字存在的,因此它似乎在结尾处下降。从数字上看,你应该有49人在名单中,但实际上只有46人。你的字典有45个条目(基于0).虽然无法解释为什么这是一次从46独特。
当我运行您的代码时,两个代码中都有46个条目。虽然我不能复制.unique()调用,因为我没有原始数据。
只需使用实际的唯一值,只需执行以下操作:
{e: int(e.split('_')[1]) for e in df["material_spec"].unique()}
{'Material_0': 0,
'Material_1': 1,
'Material_2': 2,
'Material_3': 3,
'Material_4': 4,
'Material_5': 5,
'Material_6': 6,
'Material_7': 7,
'Material_8': 8,
'Material_9': 9,
'Material_10': 10,
'Material_11': 11,
'Material_12': 12,
...
'Material_39': 39,
'Material_40': 40,
'Material_42': 42,
'Material_43': 43,
'Material_44': 44,
'Material_45': 45,
'Material_47': 47,
'Material_48': 48}注意,此输出字典中的键不包含41和46,这与输入唯一键匹配。
https://stackoverflow.com/questions/72370509
复制相似问题