将列表加入 Pandas 框架 - 我是不是保留了订单?

Posted

技术标签:

【中文标题】将列表加入 Pandas 框架 - 我是不是保留了订单?【英文标题】:Joining List to a Pandas Frame - Have I kept the order?将列表加入 Pandas 框架 - 我是否保留了订单? 【发布时间】:2019-06-27 07:17:45 【问题描述】:

所以我有 2 个用于保险理赔的人工神经网络脚本 - 一个用于训练/测试,一个用于继续执行。我已经完成了第一个,并使用真实的生产数据作为测试来开发第二个。目标/类标签是二进制 1 或 0。输入数据最初位于形状为 (5914, 23) 的数据框中,并且都是数字数据。然后我对其执行 df.values.tolist(),对所有值执行 StandardScaler()(除了第一个是 Claim ID 的值),在此过程中,它通过 np.asarray。然后我通过 ANN_Model.Predict_Proba 运行它,它给了我一个包含 5,914 对概率的列表。现在我想合并回我在执行 tolist() 之前拥有的数据框,所有概率(称为“predicted_probs”)并合并到该原始数据框上的一个新列(称为“结果”的列)和为一个班级这样做(我只对积极的班级感兴趣)。我通过以下代码这样做。但我不知道我的结果的顺序是否与数据框的顺序相同。是吗?

for i in range (0,len(predicted_probs)):
    original_df["Results"] = pd.Series(predicted_probs[i])
    print (predicted_probs[[i],[1]])

我应该换一种方式吗?我必须复制在训练脚本中完成的操作才能获得类似的结果,因此使用 StandardScaler()、np.asarray 等。

提前致谢

【问题讨论】:

【参考方案1】:

您的数据框的形状是(5914, 23)ann_model.predict_proba 的输出是5914。由于 df 中的一行将输出一个概率,因此您可以预期结果的顺序与数据框的顺序相同。要将正类的概率添加到数据框中,

original_df['Results'] = [i[1] for i in predicted_probs]

您无需循环访问predicted_probs

【讨论】:

我确实尝试过。 print("Length is " + str(len(predicted_probs))) print ("shape is " + str(original_df.shape)) 结果是:长度是 5914 形状是 (5914, 23)。您的代码导致错误“传递的项目数量错误 2,位置意味着 1”。我想你忘记了它是一个二维数组(两个结果的概率)。所以 print ("predicted_probs.shape " + str(predicted_probs.shape)) 显示了 predicted_probs.shape (5914, 2)。因此,我的循环是为每个索赔得出一个值。感觉不对,我最终可能会得到错误的声明所附的错误概率 您确实需要概率还是标签会这样做?您可以使用argmax 将您的概率转换为标签 是的,肯定需要正类的概率而不仅仅是一个标签 然后你将不得不使用循环提取它。你的想法是对的。

以上是关于将列表加入 Pandas 框架 - 我是不是保留了订单?的主要内容,如果未能解决你的问题,请参考以下文章

如何加入 Pandas Dataframes 并多次保留左列?

pandas将列表list插入到dataframe的单元格中pandas使用read_csv函数读取文件并设置保留数值的前置0( leading zeroes)

合并两个具有列表的数据集并在合并后使用 pandas 保留列表

从列表中只将指定的列传递到Pandas数据框架。

检查 Pandas DataFrame 列中的字符串是不是在字符串列表中

使用 MultiIndex 时,如何将此 Pandas 列类型保留为日期时间?