我有一个包含3列的pandas数据帧。
data = data[['id','foo','bar']]
对于大约1%的数据集,foo和bar都缺失,但不是id。我希望用随机的非空foo
和bar
对进行估算。假设id永远不为null,foo和bar都是null或者都是非null。
答案 0 :(得分:0)
你想做这样的事吗?
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()
答案 1 :(得分:0)
这可以帮到你吗?
import pandas as pd
data = pd.DataFrame(data)
invalid_data = data[(data['foo'].isnull()) & (data['bar'].isnull())]
答案 2 :(得分:0)
假设当'foo'值丢失时,'bar'值也会丢失(根据你的问题),并且列类型是浮点数:
<!DOCTYPE html>
<小时/> 如果您想使用实际数据框本身的有效值(因为它们更好地代表数据的值范围),您可以使用以下代码:
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
。)