当我将我的numpy数组转换为DataFrame时,值被更新为NaN

import impyute.imputation.cs as impprint(Data)Data = pd.DataFrame(data = imp.em(Data),columns = columns)print(Data)

当我执行上述代码时,所有的值都被转换为NaN,如下所示,有人能帮我指出我哪里做错了嗎?

转换前

     Time  LymphNodeStatus    ...      MeanPerimeter  TumorSize0      31              5.0    ...             117.50        5.01      61              2.0    ...             122.80        3.02     116              0.0    ...             137.50        2.53     123              0.0    ...              77.58        2.04      27              0.0    ...             135.10        3.55      77              0.0    ...              84.60        2.5

转换后

     Time  LymphNodeStatus    ...      MeanPerimeter  TumorSize0     NaN              NaN    ...                NaN        NaN1     NaN              NaN    ...                NaN        NaN2     NaN              NaN    ...                NaN        NaN3     NaN              NaN    ...                NaN        NaN4     NaN              NaN    ...                NaN        NaN5     NaN              NaN    ...                NaN        NaN

回答:

已编辑

解决方案优先

不要将columns传递给pd.DataFrame,而是手动分配列名:

data = pd.DataFrame(imp.em(data))data.columns = columns

原因

错误出在Data = pd.DataFrame(data = imp.em(Data),columns = columns)这一行。

imp.em有一个装饰器@preprocess,如果输入是一个pandas.DataFrame,它会将其转换为numpy.array

...if pd_DataFrame and isinstance(args[0], pd_DataFrame):    args[0] = args[0].as_matrix()    return pd_DataFrame(fn(*args, **kwargs))

因此,它返回了一个从矩阵重建的dataframe,其列名是range(data.shape[1])

正如我在下面指出的那样,当pd.DataFrame在另一个pd.DataFrame上以不匹配的columns实例化时,所有的内容都会变成NaN

你可以通过以下方式测试这一点:

from impyute.util import preprocess@preprocessdef test(data):    return datadata = pd.DataFrame({"time": [1,2,3], "size": [3,2,1]})columns = data.columnsdata = pd.DataFrame(test(data), columns = columns))size    time0   NaN NaN1   NaN NaN2   NaN NaN

当你从一个现有的pd.DataFrame实例化一个pd.DataFrame时,columns参数指定了你想使用原始数据框中的哪些列。

不会重新标记数据框。这并不奇怪,只是pandas重新索引中的设计方式

默认情况下,新索引中没有对应记录的数据框值会被赋值为NaN。

# 创建新的伪数据集data = pd.DataFrame({"time": [1,2,3], "size": [3,2,1]})data    size    time0   3   11   2   22   1   3# 使用原始的`data`创建新的数据集data = pd.DataFrame(data, columns = ["a", "b"])dataa   b0   NaN NaN1   NaN NaN2   NaN NaN

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注