【问题标题】:Python pandas dataframe getting NaN instead of valuesPython pandas数据框获取NaN而不是值
【发布时间】:2015-11-19 22:01:05
【问题描述】:

我有一个大型数据集,其中多个列具有 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')

现在在另一个脚本中,当我输入以下内容时,我在srch_query_affinity_score 中得到NaNs

df = pd.DataFrame.from_csv('final_train_data.csv',header=0)
print df

【问题讨论】:

  • 虽然可能是一个大文件,但应该可以手动检查“final_train_data.csv”并查找任何类似 NaN 的内容。否则,是否可以提供一个具有这些 NaN 问题的小型“temp_train.csv”(可能只有几行),以便其他人可以重现该问题?
  • Evert,我在 Sublime Text 中看到了该文件并搜索了 NaN,但没有找到任何 NaN。
  • 我会一行一行地保存文件,然后计算出代码在哪一行出现故障。 prop_review_score 中唯一可能的 NaN 是什么?如果不是,那么显然意味着 NaN 是 NaN,所以这可能会导致问题......

标签: python pandas dataframe


【解决方案1】:

我建议在数据帧上使用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

【讨论】:

  • 这是在 NaN 和实际数据数量相等的例外情况下:pandas 似乎掩盖/忽略了 NaN,numpy 包括它们。也许 OP 确实有这种情况,但它似乎有些特殊。 Numpy 1.9,顺便说一句,有函数nanmedian,它也忽略了 NaN。
猜你喜欢
  • 2016-08-09
  • 2012-08-10
  • 2022-12-05
  • 1970-01-01
  • 2021-05-26
  • 2022-12-03
  • 2019-08-31
  • 2015-08-28
  • 2015-05-12
相关资源
最近更新 更多