2016-08-09 61 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

戻り値( 'DataFrame.drop()')に何も指定せず、 'inplace = True'を指定していないので、' drop'は何もしていないようです。あなたは 'randomize'の戻り値をデータフレームに割り当てないことで同様の誤りを犯していますか?返す前に 'print(df1)'していれば、( 'column'が有効であれば)正しくランダム化されているはずです。 – jedwards

+0

もう一度@jedwardsが言っていること。あなたの最初の2行は 'df1 = data.drop(列、軸= 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

ああはい - 私は今それを参照 –

関連する問題