我有一個3列的熊貓數據框。使用非缺失數據填充熊貓數據框中兩列的缺失數據
data = data[['id','foo','bar']]
約1%的數據集foo和bar都丟失,但沒有id。我打算用非零的foo
和bar
隨機對進行估算。假設id永遠不爲null,並且foo和bar都爲null或者都爲非null。
我有一個3列的熊貓數據框。使用非缺失數據填充熊貓數據框中兩列的缺失數據
data = data[['id','foo','bar']]
約1%的數據集foo和bar都丟失,但沒有id。我打算用非零的foo
和bar
隨機對進行估算。假設id永遠不爲null,並且foo和bar都爲null或者都爲非null。
你是否想要做類似的事情?
import pandas as pd
import numpy as np
index = range(10)
df = pd.DataFrame(np.random.randn(10,2), index=index, columns=['foo','bar'])
df['foo'].iloc[0:4] = np.nan
invalid = df['foo'].isnull()
nInvalid = df[invalid].shape[0]
valids = df['foo'][-invalid]
nValid = valids.shape[0]
randomInst = np.random.randint(0,nValid,nInvalid)
df['foo'].loc[invalid] = valids.iloc[randomInst].as_matrix()
編輯適用於酒吧以及:
df['bar'].loc[invalid] = df['bar'][-invalid].iloc[randomInst].as_matrix()
這個幫助你嗎?
import pandas as pd
data = pd.DataFrame(data)
invalid_data = data[(data['foo'].isnull()) & (data['bar'].isnull())]
假設「富」值丟失時,所述「酒吧」值也被缺失(按您的問題),並且所述列類型是浮點:
mask = df['foo'].isnull()
df.loc[mask,['foo', 'bar']] = np.random.random((np.sum(mask), 2))
df.loc[mask,['foo', 'bar']] = df[['foo', 'bar']][~mask].sample(np.sum(mask)).values
(可能用replace=True
作爲sample
方法的參數;當然也是np.random.random
。)
第二部分正是我所期待的。謝謝! –
問題 - 第二部分實際上並沒有填寫df。 –
@StevenNguyen是的,對不起'回合。我已經通過使用'.values'屬性來修正(欺騙):避免Pandas跟蹤索引,這些索引不正確匹配(樣本是從其行中沒有NaN的索引創建的,而他們需要被分配到其行中具有NaN的索引:這不正確地匹配)。 – Evert
隨機數?所以給fillna的任何東西都可以工作? – Evert
http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.Imputer.html? – Wen
@Wen,我正在尋找一個隨機插補策略 –