我正在尝试使用假设来生成一组数据帧,并将其合并在一起。我希望允许每个单独的列具有 NaN 值,并且我希望允许 Hypothesis 生成一些古怪的示例。
但我最想关注的是每个数据帧中至少有一行具有实际值的示例 - 特别是,我希望能够生成具有在相应列之间共享的一些信息的数据帧,这样合并的数据框不为空。 (例如,我希望 store.csv 中“store”的某些值与 train.csv 中“store”的值重叠。)
我有一些示例代码 here它会到处生成 NaN 值和古怪的示例,但大多数生成的示例包含很少的非 NaN 值。 (数据框策略从第 57 行开始。)
对于如何创建稍微更“现实”的示例有什么建议吗?谢谢!
最佳答案
您的解决方案对我来说看起来不错,但这里还有两个可能有帮助的策略:
使用
columns
和series
的fill=st.nothing()
参数来禁用填充行为。这使得条目变得密集而不是稀疏,因此运行时成本很高,但示例密度发生了显着变化。或者fill=st.floats(allow_nan=False)
可能会更便宜并且仍然有效!在策略上使用
.filter(...)
来拒绝没有任何 nan-free 行的数据帧。典型的经验法则是当它会拒绝超过一半的示例时避免使用 .filter ,并在超过十分之一时寻找替代方案......但这可以很容易地与第一点结合起来够了。
关于Python-Hypothesis:指定和管理 NaN 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54448434/