2016-08-09 4 views
4

Я пытаюсь взять pandas DataFrame, вынуть 1 столбец, перетасовать содержимое этого столбца, а затем поместить его обратно в DataFrame и вернуть его. Этот код используется:Numpy .shuffle дает одинаковые результаты каждый раз

def randomize(self, data, column): 
    '''Takes in a pandas database and randomizes the values in column. 

    data is the pandas dataframe to be altered. 
    column is the column in the dataframe to be randomized. 

    returns the altered dataframe. 
    ''' 
    df1 = data 
    df1.drop(column, 1) 
    newcol = list(data[column]) 
    np.random.shuffle(newcol) 
    df1[column] = newcol 
    return df1 

Он дает тот же результат каждый раз, когда я запускаю его. Почему это?

Примечание: Я использую один и тот же файл данных каждый раз.

+2

Ваш 'drop', кажется, ничего не делает, поскольку вы не присваиваете возвращаемое значение (' DataFrame.drop() ') ни к чему, и вы не указываете' inplace = True'. Вы делаете аналогичную ошибку, не присваивая возвращаемое значение 'randomize' обратно в ваш dataframe? Если вы 'print (df1)' перед его возвратом, вы должны увидеть, что он рандомизирован правильно (при условии, что 'column' является допустимым). – jedwards

+0

Я второй, что @jedwards говорит. Ваши первые две строки должны быть объединены в 'df1 = data.drop (column, axis = 1)' –

ответ

1

Ваш код

def randomize(data, column): 
    df1 = data.copy() 
    newcol = list(data[column]) 
    np.random.shuffle(newcol) 
    df1[column] = newcol 
    return df1 

Мой df

df = pd.DataFrame(np.arange(25).reshape(5, 5), list('abcde'), list('ABCDE')) 

Ваш код + Мой df

np.random.seed([3,1415]) 
randomize(df, 'A') 

enter image description here

И снова

randomize(df, 'A') 

enter image description here

Похоже, это работает!

+0

Ошибка копирования/вставки? первый и второй данные являются одинаковыми. –

+0

@PaulH loc [['c', 'd', 'e'], 'A'] 'все разные. – piRSquared

+0

ahh yes - я вижу это сейчас –