假設有以下資料框:
import pandas as pd
import numpy as np
vals = [1, 2, 3, 4, 5]
df = pd.DataFrame({'val': vals})
df['val'][[0, 3]] = np.nan
給出:
val
0 NaN
1 2.0
2 3.0
3 NaN
4 5.0
我需要能夠更換NaN中的值val與2D陣列numpy的零的列中。當我執行以下操作時:
z = np.zeros((10, 10))
df['val'][df['val'].isnull()] = z
陣列被轉換為值為 0.0 的標量:
val
0 0.0
1 2.0
2 3.0
3 0.0
4 5.0
我真的需要維護陣列(在這種情況下,每個NaN值 - 來自原始資料幀的第 0 行和第 3 行 - 應該替換為 10x10 的零陣列)。我試過先轉換為object型別
df = df.astype(object)
df['val'][df['val'].isnull()] = z
沒有成功。為什么
uj5u.com熱心網友回復:
這是由我們有辦法處理的物件資料型別引起的 fillna
df.val.fillna(dict(zip(df.index[df['val'].isnull()],[z]*df['val'].isnull().sum())),inplace=True)
df
val
0 [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...
1 2.0
2 3.0
3 [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...
4 5.0
uj5u.com熱心網友回復:
你真的很親近。將資料框的 dtype 更改為object并更改= z為= [z]:
df = df.astype(object)
df.loc[df['val'].isna(), 'val'] = [z]
輸出:
>>> df
val
0 [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...
1 2.0
2 3.0
3 [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...
4 5.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/390685.html
