2016-08-09 2 views
4

팬더 데이터 프레임을 가져 와서 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'의 반환 값을 할당하지 않아서 비슷한 실수를하고 있습니까? 리턴하기 전에'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

복사/붙여 넣기 오류로 결합되어야합니까? 제 1 및 제 2 데이터 프레임은 동일하다. –

+0

@PaulH'loc [[ 'c', 'd', 'e'], 'A']'는 모두 다릅니다. – piRSquared

+0

ahh 예 - 지금 보시오 –

관련 문제