Отвечая на мой собственный вопрос, но я бы хотел услышать другие ответы.
Я закончил тем, что сделал две вещи:
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]