我有一个大型数据集,其中多列具有NaN值。我使用python pandas
用平均值替换少数列中的缺失值,其余用中值替换。我摆脱了所有的NaN值,并将Dataframe的结果写入了一个新文件。
现在当我再次阅读新文件时,它包含NaN而不是值。我无法弄清楚为什么会这样。以下是我的参考代码:
df = pd.DataFrame.from_csv('temp_train.csv',header=0)
df.prop_review_score=df.prop_review_score.fillna(0)
mean_score_2 = np.mean(df.prop_location_score2)
df.prop_location_score2 = df.prop_location_score2.fillna(mean_score_2)
median_search_query = np.median(df.srch_query_affinity_score)
df.srch_query_affinity_score = df.srch_query_affinity_score.fillna(median_search_query)
median_orig_distance = np.median(df.orig_destination_distance)
df.orig_destination_distance = df.orig_destination_distance.fillna(median_orig_distance)
df.to_csv('final_train_data.csv')
现在,在我输入以下内容的另一个脚本中,我在NaNs
srch_query_affinity_score
df = pd.DataFrame.from_csv('final_train_data.csv',header=0)
print df
答案 0 :(得分:0)
我建议在数据框上使用pandas.DataFrame.median
而不是numpy.median
。
对我的快速测试显示(当Woody建议的数据中存在NaN时):
df = pd.DataFrame({'x':[10,pd.np.NAN,np.NAN,20]})
df.x.median() # returns 20.0
np.median(df.x) # returns NaN
所以考虑更换:
median_search_query = np.median(df.srch_query_affinity_score)
同
median_search_query = df.srch_query_affinity_score.median()
为了确保在你去csv之前做一些事情:
assert df.srch_query_affinity_score.isnull().sum() == 0