DataFrame 入门

了解如何开始使用 DataFrames,这是用于存储和作数据的二维数据结构。 DataFrame 有助于为机器学习模型准备数据。 数据帧还可用于与机器学习无关的数据处理任务。

安装 Microsoft.Data.Analysis

在大多数情况下,访问 DataFrame 与引用 Microsoft.Data.Analysis NuGet 包一样简单。

dotnet add package Microsoft.Data.Analysis

或者,在 .NET 10+ 中:

dotnet package add Microsoft.Data.Analysis

加载数据

使用 DataFrame 可以轻松加载表格数据。 使用以下数据创建一个名为 housing-prices.csv 的逗号分隔文件。

Id,Size,HistoricalPrice,CurrentPrice
1,600f,100000,170000
2,1000f,200000,225000
3,1000f,126000,195000
4,850f,150000,205000
5,900f,155000,210000
6,550f,99000,180000

首先将数据加载到 DataFrame。

using System.IO;
using System.Linq;
using Microsoft.Data.Analysis;

// Define data path
var dataPath = Path.GetFullPath(@"housing-prices.csv");

// Load the data into the data frame
var dataFrame = DataFrame.LoadCsv(dataPath);

检查数据

DataFrames 将数据存储为列的集合。 这样就可以轻松地与数据进行交互。

若要获取列数据类型的预览,请运行 Info()

dataFrame.Info();

若要获取数据的摘要,请运行 Description()

dataFrame.Description();

转换数据

数据有多种转换选项。 这些 DataFrameDataFrameColumn 类公开了许多有用的 API,包括二进制作、计算、联接、合并和处理缺失值。

例如,可以编辑此数据,将历史价格与计算通货膨胀的当前价格进行比较。 可以将计算应用到所有值,并将结果保存在新列中。

dataFrame["ComputedPrices"] = dataFrame["HistoricalPrice"].Multiply(2);

可以将数据从特定列中的值排序为组。

var sortedDataFrame = dataFrame.GroupBy("Size");

可以根据不同的相等指标筛选数据。 此示例使用 ElementWise 相等函数,然后根据布尔结果列筛选,以获取仅具有适当值的新 DataFrame。

PrimitiveDataFrameColumn<bool> boolFilter = dataFrame["CurrentPrice"].ElementwiseGreaterThan(200000);
DataFrame filteredDataFrame = dataFrame.Filter(boolFilter);

合并数据源

请考虑以下原始数据:

Id, Bedrooms
1, 1
2, 2
3, 3
4, 2
5, 3
6, 1

可以从单个数据列构造数据帧。 从原始数据列表创建数据帧。

var ids = new List<Single>() {1,2,3,4,5,6};
var bedrooms = new List<Single>() {1, 2, 3, 2, 3, 1};

var idColumn = new SingleDataFrameColumn("Id", ids);
var bedroomColumn = new SingleDataFrameColumn("BedroomNumber", bedrooms);
var dataFrame2 = new DataFrame(idColumn, bedroomColumn);

可以根据 Id 的值合并这两个数据帧。 merge 函数接受两个 DataFrame,并根据其 Id 值组合行。

dataFrame = dataFrame.Merge(dataFrame2, new string[] {"Id"}, new string[] {"Id"});

保存数据帧

结果可以保存回 .csv 格式。

DataFrame.SaveCsv(dataFrame, "result.csv", ',');

将 DataFrame 与 ML.NET 配合使用

数据帧可以直接与 ML.NET 一起使用。 DataFrame 实现 IDataView 并可用于训练模型。