将 nan 值添加到数据框会给出无法散列的类型:'numpy.ndarray' in Python
Adding a nan values to dataframe gives unhashable type: 'numpy.ndarray' in Python
我想插入np.nan
到一个dataframe
;每行一个 nan
,位置随机。
这是我的dataframe
:
list_cols= ['col01', 'col02', 'col03', 'col04', 'col05','col06', 'col07', 'col08', 'col09', 'col10','col11', 'col12', 'col13', 'col14', 'col15', 'col16']
X_full = pd.DataFrame(np.random.uniform(low=1.0, high=100.0, size=(5,16)), columns=list(list_cols))
这是我的代码:
# Add a single nan value to each row
rng = np.random.RandomState(0)
n_samples, n_features = X_full.shape
X_missing = X_full.copy()
missing_samples = np.arange(n_samples)
missing_features = rng.choice(n_features, n_samples, replace=True)
X_missing[missing_samples, missing_features] = np.nan
它returns TypeError: unhashable type: 'numpy.ndarray'
.
感谢帮助。
由于我不能 100% 确定我是否正确理解了您的问题,以防您只是想将单个单元格的值更改为 NaN(即 (0, 12) & (1, 7) 等处的值)应该是 nan) 那么你可以使用:
for row, column in zip(missing_samples, missing_features):
X_missing.iat[row, column] = np.nan
请注意,我们使用以 'i': .iat
开头的方法。这意味着我们正在应用的更改是基于 I 索引而不是 row/column 名称。
在您的示例中,您会收到一个错误,因为它将 missing_samples
和 missing_features
解释为行名和列名,但您提供的值是数字(即索引)。您可以使用 .iloc
来澄清您提供的是索引而不是名称,但随后它将替换整行,这就是我使用 .iat
的原因,因为我假设您只想替换值 ' at' 特定的'i ndices'。希望这有帮助
你可以做到
X_missing = X_full.copy()
indexes = np.random.choice(range(X_missing.shape[1]), X_missing.shape[0])
X_missing.values[range(X_missing.shape[0]), indexes] = np.nan
我想插入np.nan
到一个dataframe
;每行一个 nan
,位置随机。
这是我的dataframe
:
list_cols= ['col01', 'col02', 'col03', 'col04', 'col05','col06', 'col07', 'col08', 'col09', 'col10','col11', 'col12', 'col13', 'col14', 'col15', 'col16']
X_full = pd.DataFrame(np.random.uniform(low=1.0, high=100.0, size=(5,16)), columns=list(list_cols))
这是我的代码:
# Add a single nan value to each row
rng = np.random.RandomState(0)
n_samples, n_features = X_full.shape
X_missing = X_full.copy()
missing_samples = np.arange(n_samples)
missing_features = rng.choice(n_features, n_samples, replace=True)
X_missing[missing_samples, missing_features] = np.nan
它returns TypeError: unhashable type: 'numpy.ndarray'
.
感谢帮助。
由于我不能 100% 确定我是否正确理解了您的问题,以防您只是想将单个单元格的值更改为 NaN(即 (0, 12) & (1, 7) 等处的值)应该是 nan) 那么你可以使用:
for row, column in zip(missing_samples, missing_features):
X_missing.iat[row, column] = np.nan
请注意,我们使用以 'i': .iat
开头的方法。这意味着我们正在应用的更改是基于 I 索引而不是 row/column 名称。
在您的示例中,您会收到一个错误,因为它将 missing_samples
和 missing_features
解释为行名和列名,但您提供的值是数字(即索引)。您可以使用 .iloc
来澄清您提供的是索引而不是名称,但随后它将替换整行,这就是我使用 .iat
的原因,因为我假设您只想替换值 ' at' 特定的'i ndices'。希望这有帮助
你可以做到
X_missing = X_full.copy()
indexes = np.random.choice(range(X_missing.shape[1]), X_missing.shape[0])
X_missing.values[range(X_missing.shape[0]), indexes] = np.nan