File: Dynamic\DataOperations\FilterRowsByMissingValues.cs
Web Access
Project: src\docs\samples\Microsoft.ML.Samples\Microsoft.ML.Samples.csproj (Microsoft.ML.Samples)
using System;
using System.Collections.Generic;
using Microsoft.ML;
using Microsoft.ML.SamplesUtils;
 
namespace Samples.Dynamic
{
    public class FilterRowsByMissingValues
    {
        /// <summary>
        /// Sample class showing how to use FilterRowsByMissingValues.
        /// </summary>
        public static void Example()
        {
            // Create a new ML context, for ML.NET operations. It can be used for
            // exception tracking and logging, as well as the source of randomness.
            var mlContext = new MLContext();
 
            // Create a small dataset as an IEnumerable.
            var samples = new List<DataPoint>()
            {
                new DataPoint(){ Feature1 = 21, Feature2 = new [] { 1, 2, float.NaN}
                    },
 
                new DataPoint(){ Feature1 = 40, Feature2 = new [] { 1f, 2f, 3f}  },
                new DataPoint(){ Feature1 = float.NaN, Feature2 = new [] { 1, 2,
                    float.NaN}  }
 
            };
 
            // Convert training data to IDataView.
            var data = mlContext.Data.LoadFromEnumerable(samples);
 
            // Filter out any row with an NaN values in either column
            var filteredData = mlContext.Data
                .FilterRowsByMissingValues(data, new[] { "Feature1", "Feature2" });
 
            // Take a look at the resulting dataset and note that rows with NaNs are
            // filtered out. Only the second data point is left
            var enumerable = mlContext.Data
                .CreateEnumerable<DataPoint>(filteredData, reuseRowObject: true);
 
            Console.WriteLine($"Feature1   Feature2");
 
            foreach (var row in enumerable)
            {
                Console.WriteLine($"{row.Feature1}" +
                    $"\t({string.Join(", ", row.Feature2)})");
            }
 
            // Feature1     Feature2
            // 
            //   40         (1, 2, 3)
 
        }
 
        private class DataPoint
        {
            public float Feature1 { get; set; }
 
            public float[] Feature2 { get; set; }
        }
    }
}