Python 获得NaN';s,而不是dataframe列中的正确值
我使用以下语法创建了一个由零组成的数据帧:Python 获得NaN';s,而不是dataframe列中的正确值,python,pandas,Python,Pandas,我使用以下语法创建了一个由零组成的数据帧: ltv = pd.DataFrame(data=np.zeros([actual_df.shape[0], 6]), columns=['customer_id', 'actual_total', 'predicted_num_purchases',
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)
ltv['customer_id'] = actual_df['customer_id']
结果完全如预期的那样
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 = 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)
ltv['customer_id'] = actual_df['customer_id']
我在ltv['customer\u id']
中获得了所有的NAN。这是什么原因造成的?我如何防止它发生
NB:我还检查了
actual_df
,其中没有NaN您需要在这两个数据帧中使用相同的索引值(以及两个数据帧的相同长度)
因此,第一种解决方案是在actual_df
中创建默认的RabgeIndex
,在ltv
中未指定,因此默认创建:
actual_df = actual_df.reset_index(drop=True)
ltv['customer_id'] = actual_df['customer_id']
或者将参数索引
添加到数据帧
构造函数:
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']
另一种选择(比jezrael的伟大答案更复杂)是使用pd.concat()
,然后使用.drop()
:
这听起来很熟悉:P