【问题标题】:Is there a way to set random state for all pandas function?有没有办法为所有熊猫功能设置随机状态?
【发布时间】:2019-02-21 19:52:03
【问题描述】:

如标题所示,为每个与随机性相关的 pandas 函数设置 random_state 似乎非常具有指导意义。有什么方法可以只设置一次以确保为所有功能设置随机状态?

【问题讨论】:

  • 这个参数是可选的,不是吗?
  • @Wen 这对 pandas 有效吗?
  • @OliverCharlesworth 是的。但我试图确保我可以重现我正在做的事情,所以我需要为每个(适用的)函数设置 random_state。

标签: python pandas numpy


【解决方案1】:

Pandas 函数通过调用 pd.core.common._random_state 获取它们的随机源,它接受单个 state 参数,默认为 None。来自其文档:

Parameters
----------
state : int, np.random.RandomState, None.
    If receives an int, passes to np.random.RandomState() as seed.
    If receives an np.random.RandomState object, just returns object.
    If receives `None`, returns np.random.
    If receives anything else, raises an informative ValueError.
    Default None.

所以如果它得到 None,这是调用者的 random_state 的默认值,它返回 np.random 模块本身:

In [247]: pd.core.common._random_state(None)
Out[247]: <module 'numpy.random' from 'C:\\Python\\lib\\site-packages\\numpy\\random\\__init__.py'>

it 将使用全局 numpy 状态。所以:

In [262]: np.random.seed(3)

In [263]: pd.Series(range(10)).sample(3).tolist()
Out[263]: [5, 4, 1]

In [264]: pd.DataFrame({0: range(10)}).sample(3)[0].tolist()
Out[264]: [3, 8, 2]

In [265]: np.random.seed(3)

In [266]: pd.Series(range(10)).sample(3).tolist()
Out[266]: [5, 4, 1]

In [267]: pd.DataFrame({0: range(10)}).sample(3)[0].tolist()
Out[267]: [3, 8, 2]

如果任何方法不尊重这一点,那就是一个错误。

【讨论】:

  • 因此,每当我设置 numpy 的随机种子并且不将任何类型的 random_state 传递给 pandas 操作时,我的代码仍将基于 np.random.seed 是确定性的。对吗?
  • 正确,或者至少这就是意图。 :-)
  • 谢谢!!另外,np.random.seedrandom.seed 之间有联系吗?
  • @Mr.cysl,不,他们有不同的内部状态
猜你喜欢
  • 1970-01-01
  • 2017-01-14
  • 1970-01-01
  • 2019-06-03
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
相关资源
最近更新 更多