TL; DR : np.random.shuffle(ndarray)
สามารถทำงานได้
ดังนั้นในกรณีของคุณ
np.random.shuffle(DataFrame.values)
DataFrame
ภายใต้ประทุนใช้ NumPy ndarray เป็นผู้ถือข้อมูล (คุณสามารถตรวจสอบได้จากซอร์สโค้ด DataFrame )
ดังนั้นถ้าคุณใช้np.random.shuffle()
มันจะสับเปลี่ยนอาร์เรย์ไปตามแกนแรกของอาร์เรย์หลายมิติ แต่ดัชนีของDataFrame
ซากยังคงไม่ลดลง
แม้ว่าจะมีบางจุดที่ต้องพิจารณา
- ฟังก์ชั่นไม่มีผลตอบแทน ในกรณีที่คุณต้องการเก็บสำเนาของวัตถุดั้งเดิมคุณต้องทำก่อนส่งผ่านฟังก์ชั่น
sklearn.utils.shuffle()
ตามที่ผู้ใช้แนะนำ tj89 สามารถกำหนดrandom_state
พร้อมกับตัวเลือกอื่นเพื่อควบคุมเอาต์พุต คุณอาจต้องการสิ่งนั้นเพื่อจุดประสงค์
sklearn.utils.shuffle()
เร็วกว่า. แต่จะเก็บข้อมูลแกน (ดัชนีคอลัมน์) ของเครื่องหมายDataFrame
พร้อมกับข้อมูลndarray
นั้นไว้
ผลการเปรียบเทียบ
ระหว่างและsklearn.utils.shuffle()
np.random.shuffle()
ndarray
nd = sklearn.utils.shuffle(nd)
0.10793248389381915 วินาที เร็วขึ้น 8x
np.random.shuffle(nd)
0.8897626010002568 วินาที
DataFrame
df = sklearn.utils.shuffle(df)
0.3183923360193148 วินาที เร็วกว่า 3x
np.random.shuffle(df.values)
0.9357550159329548 วินาที
สรุป: ถ้ามันโอเคที่จะข้อมูลแกน (ดัชนีคอลัมน์) ที่จะสับพร้อมกับ ndarray sklearn.utils.shuffle()
ใช้ มิฉะนั้นให้ใช้np.random.shuffle()
รหัสที่ใช้
import timeit
setup = '''
import numpy as np
import pandas as pd
import sklearn
nd = np.random.random((1000, 100))
df = pd.DataFrame(nd)
'''
timeit.timeit('nd = sklearn.utils.shuffle(nd)', setup=setup, number=1000)
timeit.timeit('np.random.shuffle(nd)', setup=setup, number=1000)
timeit.timeit('df = sklearn.utils.shuffle(df)', setup=setup, number=1000)
timeit.timeit('np.random.shuffle(df.values)', setup=setup, number=1000)
หลามเปรียบเทียบ