【问题标题】:C# Convert between Deedle Frame and DataTableC# Deedle Frame 和 DataTable 之间的转换
【发布时间】:2016-12-03 20:31:24
【问题描述】:

我是 C#/F# 的新手。用 C# 演示 Deedle 的在线资源非常有限,但我确实需要使用 C# 进行数据分析。

样本数据是 Titanic.csv,来自这里:https://forge.scilab.org/index.php/p/rdataset/source/tree/master/csv/datasets/Titanic.csv

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using Deedle;

namespace DepositDataCleaning
{
    class Program
    {
        static void Main(string[] args)
        {

    var titanic = Frame.ReadCsv(@"Titanic.csv");
    DataTable dt = titanic.ToDataTable(new string[1]{"Index"}); 
    # This works, to convert a deedle frame to .NET DataTable Format

    var new_deedleframe = Frame.FromRecords(dt); # it doesn't work.

        }
    }
}

【问题讨论】:

    标签: c# datatable data-manipulation deedle


    【解决方案1】:

    您可以将 DataTable 转换为 DataTableReader 并使用 Frame.ReadReader 创建 Frame:

    var new_deedleframe = Frame.ReadReader(dt.CreateDataReader())
    

    【讨论】:

      【解决方案2】:

      您需要Frame.Records 的集合。 DataTable 不是集合,但它的 Rows 成员是。你可以这样做:

      var deedleFrame = Frame.FromRecords(dt.Rows.OfType<DataRow>());
      

      【讨论】:

      • 这是错误的。 Frame.FromRecords 对传入的对象的属性执行反射。如果您按照建议进行操作,它将根据 DataRow 上的属性创建一个 Frame,而不是其中的项目。
      • @MgSam 你是对的。您介意分享我的问题的任何其他解决方案吗?
      猜你喜欢
      • 1970-01-01
      • 2011-05-19
      • 2010-09-21
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多