回答我自己的问题,但我很想听听其他答案。
我最终做了两件事:
1) 要求最终用户不提供垃圾文件。(仅仅因为我们有一个神奇的属性生成框架并不能免除我们拥有常识的责任,我忘记了。)
2) 通过要求每个数据帧至少有一行没有 NaN 来测试合理事故但不是绝对垃圾的事情。有了这个要求,我生成了非 NaN 数据帧,然后添加了一些 NaN。
从那里, ipython 和 .example() 可以很容易地看到发生了什么。
下面的示例代码(google_files 和 google_weeks 是之前创建的自定义策略)
# Create dataframes from the strategies above
# We'll create dataframes with all non-NaN values, then add NaNs to rows
# after the fact
df = draw(data_frames([
column('file', elements=google_files),
column('week', elements=google_weeks),
column('trend',
elements=(integers(min_value=0, max_value=100)))],
index=range_indexes(min_size=1, max_size=100)))
# Add the nans
# With other dataframes, this ended up getting written into a function
rows = len(df)
df.loc[rows+1] = [np.NaN, '2014-01-05 - 2014-01-11', 42]
df.loc[rows+2] = ['DE_BE', np.NaN, 42]
df.loc[rows+3] = ['DE_BE', '2014-01-05 - 2014-01-11', np.NaN]
df.loc[rows+4] = [np.NaN, np.NaN, np.NaN]