了解如何开始使用 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();
转换数据
数据有多种转换选项。 这些 DataFrame 和 DataFrameColumn 类公开了许多有用的 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 并可用于训练模型。