当我将 numpy 数组转换为 Dataframe 时,它会将值更新为 Nan
When i convert my numpy array to Dataframe it update values to Nan
import impyute.imputation.cs as imp
print(Data)
Data = pd.DataFrame(data = imp.em(Data),columns = columns)
print(Data)
当我执行上面的代码时,我的所有值都转换为 Nan,如下所示,有人可以帮助我哪里出错了吗?
之前
Time LymphNodeStatus ... MeanPerimeter TumorSize
0 31 5.0 ... 117.50 5.0
1 61 2.0 ... 122.80 3.0
2 116 0.0 ... 137.50 2.5
3 123 0.0 ... 77.58 2.0
4 27 0.0 ... 135.10 3.5
5 77 0.0 ... 84.60 2.5
之后
Time LymphNodeStatus ... MeanPerimeter TumorSize
0 NaN NaN ... NaN NaN
1 NaN NaN ... NaN NaN
2 NaN NaN ... NaN NaN
3 NaN NaN ... NaN NaN
4 NaN NaN ... NaN NaN
5 NaN NaN ... NaN NaN
impyute
库中可能存在一些错误。您正在使用 em
函数,它不过是通过 expectation-maximization
算法获得 fill-missing
值的一种方法。您可以尝试不使用该功能,因为
df = pd.DataFrame(data = Data ,columns = columns)
您可以在确认后提出此问题here。要确认首先加载数据,请使用上面的示例并使用 df.isnull()
方法查找数据中是否存在空数据。
已编辑
先解决
不是将 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))
它因此 returns 从矩阵重建的 dataframe
,具有 range(data.shape[1])
作为列名。
正如我在下面指出的那样,当 pd.DataFrame
在另一个 pd.DataFrame
上用 不匹配 columns
实例化时,所有内容都变成 NaN
.
你可以通过
测试这个
from impyute.util import preprocess
@preprocess
def test(data):
return data
data = pd.DataFrame({"time": [1,2,3], "size": [3,2,1]})
columns = data.columns
data = pd.DataFrame(test(data), columns = columns))
size time
0 NaN NaN
1 NaN NaN
2 NaN NaN
当您从现有 pd.DataFrame
实例化 pd.DataFrame
时,columns
参数指定您要使用原始数据框中的哪些列。
它不会重新标记数据帧。这并不奇怪,正是 pandas
在 reindexing
中的意图
By default values in the new index that do not have corresponding records in the dataframe are assigned NaN.
# Make new pseudo dataset
data = pd.DataFrame({"time": [1,2,3], "size": [3,2,1]})
data
size time
0 3 1
1 2 2
2 1 3
#Make new dataset with original `data`
data = pd.DataFrame(data, columns = ["a", "b"])
data
a b
0 NaN NaN
1 NaN NaN
2 NaN NaN
Data = pd.DataFrame(data = np.array(imp.em(Data)),columns = columns)
这样做解决了我面临的问题,我想使用 em
函数后的数据不会 return numpy 数组。
import impyute.imputation.cs as imp
print(Data)
Data = pd.DataFrame(data = imp.em(Data),columns = columns)
print(Data)
当我执行上面的代码时,我的所有值都转换为 Nan,如下所示,有人可以帮助我哪里出错了吗?
之前
Time LymphNodeStatus ... MeanPerimeter TumorSize
0 31 5.0 ... 117.50 5.0
1 61 2.0 ... 122.80 3.0
2 116 0.0 ... 137.50 2.5
3 123 0.0 ... 77.58 2.0
4 27 0.0 ... 135.10 3.5
5 77 0.0 ... 84.60 2.5
之后
Time LymphNodeStatus ... MeanPerimeter TumorSize
0 NaN NaN ... NaN NaN
1 NaN NaN ... NaN NaN
2 NaN NaN ... NaN NaN
3 NaN NaN ... NaN NaN
4 NaN NaN ... NaN NaN
5 NaN NaN ... NaN NaN
impyute
库中可能存在一些错误。您正在使用 em
函数,它不过是通过 expectation-maximization
算法获得 fill-missing
值的一种方法。您可以尝试不使用该功能,因为
df = pd.DataFrame(data = Data ,columns = columns)
您可以在确认后提出此问题here。要确认首先加载数据,请使用上面的示例并使用 df.isnull()
方法查找数据中是否存在空数据。
已编辑
先解决
不是将 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))
它因此 returns 从矩阵重建的 dataframe
,具有 range(data.shape[1])
作为列名。
正如我在下面指出的那样,当 pd.DataFrame
在另一个 pd.DataFrame
上用 不匹配 columns
实例化时,所有内容都变成 NaN
.
你可以通过
测试这个from impyute.util import preprocess
@preprocess
def test(data):
return data
data = pd.DataFrame({"time": [1,2,3], "size": [3,2,1]})
columns = data.columns
data = pd.DataFrame(test(data), columns = columns))
size time
0 NaN NaN
1 NaN NaN
2 NaN NaN
当您从现有 pd.DataFrame
实例化 pd.DataFrame
时,columns
参数指定您要使用原始数据框中的哪些列。
它不会重新标记数据帧。这并不奇怪,正是 pandas
在 reindexing
By default values in the new index that do not have corresponding records in the dataframe are assigned NaN.
# Make new pseudo dataset
data = pd.DataFrame({"time": [1,2,3], "size": [3,2,1]})
data
size time
0 3 1
1 2 2
2 1 3
#Make new dataset with original `data`
data = pd.DataFrame(data, columns = ["a", "b"])
data
a b
0 NaN NaN
1 NaN NaN
2 NaN NaN
Data = pd.DataFrame(data = np.array(imp.em(Data)),columns = columns)
这样做解决了我面临的问题,我想使用 em
函数后的数据不会 return numpy 数组。