Answers:
像这样吗
import random
def some(x, n):
return x.ix[random.sample(x.index, n)]
注:由于熊猫v0.20.0的,ix
已被弃用,赞成loc
基于标签索引。
df.ix[np.random.random_integers(0, len(df), 10)]
,也可以。
df.ix[np.random.choice(df.index, 10)]
。
np.random.choice
速度是random.sample
随着pandas版本0.16.1
及更高版本,现在DataFrame.sample
内置了一个方法:
import pandas
df = pandas.DataFrame(pandas.np.random.random(100))
# Randomly sample 70% of your dataframe
df_percent = df.sample(frac=0.7)
# Randomly sample 7 elements from your dataframe
df_elements = df.sample(n=7)
对于上述两种方法,您都可以通过执行以下操作获得其余的行:
df_rest = df.loc[~df.index.isin(df_percent.index)]
df_0.7
不是有效的名称。此外,我建议更换df_rest = df.loc[~df.index.isin(df_0_7.index)]
用df_rest = df.loc[df.index.difference(df_0_7.index)]
。
difference()
吗?
df_percent.index.get_indexer(df.index) == -1
相反,它的效率要高得多(但也更难看)……
sample
从v0.20.0开始,您可以使用pd.DataFrame.sample
,它可用于返回固定数量的行或行百分比的随机样本:
df = df.sample(n=k) # k rows
df = df.sample(frac=k) # int(len(df.index) * k) rows
为了重现性,您可以指定一个整数random_state
,等效于使用np.ramdom.seed
。因此,不用设置,例如np.random.seed = 0
,您可以:
df = df.sample(n=k, random_state=0)
下面的行将从数据帧df的现有行总数中随机选择n个行,而不进行替换。
df=df.take(np.random.permutation(len(df))[:n])
df.sample(N, replace=True)
。更多细节在这里。