获取数据框列中正确值而不是NaN的标题

2024-09-27 07:21:31 发布

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

我使用以下语法创建了一个由零组成的数据帧:

ltv = pd.DataFrame(data=np.zeros([actual_df.shape[0], 6]),
                        columns=['customer_id',
                                'actual_total',
                                'predicted_num_purchases',
                                'predicted_value',
                                'predicted_total',
                                'error'], dtype=np.float32)

结果完全如预期的那样

customer_id | actual_total | predicted_num_purchases | predicted_value | predicted_total | error
0   0.0          0.0             0.0                         0.0              0.0           0.0
1   0.0          0.0             0.0                         0.0              0.0           0.0
2   0.0          0.0             0.0                         0.0              0.0           0.0

运行此语法时:

ltv['customer_id'] = actual_df['customer_id']

我在^{中得到了所有的NaN。这是什么原因造成的?我如何防止它发生

NB:我还检查了actual_df,其中没有NAN


Tags: 数据iddfvaluenp语法errorcustomer
2条回答

您需要在这两个数据帧中使用相同的索引值(以及两个数据帧的相同长度)

因此,第一个解决方案是在actual_df中创建默认RabgeIndex,在ltv中未指定,因此默认创建:

actual_df = actual_df.reset_index(drop=True)
ltv['customer_id'] = actual_df['customer_id']

或将参数index添加到DataFrame构造函数:

ltv = pd.DataFrame(data=np.zeros([actual_df.shape[0], 6]),
                        columns=['customer_id',
                                'actual_total',
                                'predicted_num_purchases',
                                'predicted_value',
                                'predicted_total',
                                'error'], dtype=np.float32,
                        index=actual_df.index)

ltv['customer_id'] = actual_df['customer_id']

另一种选择(比耶兹雷尔的伟大答案更复杂)是使用pd.concat()后跟.drop()

ltv = pd.concat([ltv.drop(columns=['customer_id']),actual_df[['customer_id']]],axis=1,ignore_index=True)

相关问题 更多 >

    热门问题