在熊猫数据帧中随机插入NA的值

时间:2016-08-20 14:48:10

标签: python pandas numpy missing-data

如何在DataFrame中随机插入np.nan? 假设我想在DataFrame中使用10%的空值。

我的数据如下:

df = pd.DataFrame(np.random.randn(5, 3), 
                  index=['a', 'b', 'c', 'd', 'e'],
                  columns=['one', 'two', 'three'])

        one       two     three
a  0.695132  1.044791 -1.059536
b -1.075105  0.825776  1.899795
c -0.678980  0.051959 -0.691405
d -0.182928  1.455268 -1.032353
e  0.205094  0.714192 -0.938242

是否有一种简单的方法可以插入空值?

3 个答案:

答案 0 :(得分:13)

这里有一种方法可以准确地清除10%的单元格(或者更确切地说,可以通过现有数据框的大小实现接近10%)。

import random
ix = [(row, col) for row in range(df.shape[0]) for col in range(df.shape[1])]
for row, col in random.sample(ix, int(round(.1*len(ix)))):
    df.iat[row, col] = np.nan

这是一种独立清除细胞的方法,每细胞概率为10%。

df = df.mask(np.random.random(df.shape) < .1)

答案 1 :(得分:7)

我认为您可以轻松地遍历数据帧列,并为pandas.DataFrame.sample()方法产生的每个单元格分配NaN值。

代码如下。

for col in df.columns:
    df.loc[df.sample(frac=0.1).index, col] = pd.np.nan

答案 2 :(得分:0)

要稍微添加和修改@Jaroslav Bezděk 的代码,这是我的观点。在这里,我假设您想将 NaN 应用于数值变量。

# select only numeric columns to apply the missingness to
cols_list = df.select_dtypes('number').columns.tolist()
        
# randomly remove cases from the dataframe
for col in df[cols_list]:
    df.loc[df.sample(frac=0.05).index, col] = np.nan

注意:如果您使用 pd.np.nan,您会得到 ipython-input-5-e9827aa92133>:9: FutureWarning: The pandas.np module is deprecated and will be removed from pandas in a future version. Import numpy directly instead.