我有一个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,我正在寻找一个随机插补策略 –