3
3
// See the LICENSE file in the project root for more information.
4
4
5
5
using System ;
6
+ using System . Collections . Generic ;
6
7
using System . Linq ;
7
8
using Microsoft . Data . Analysis ;
8
9
@@ -22,19 +23,32 @@ public static DataFrame ToDataFrame(this TabularDataResource tabularDataResource
22
23
23
24
foreach ( var fieldDescriptor in tabularDataResource . Schema . Fields )
24
25
{
26
+ var fieldName = fieldDescriptor . Name ;
27
+ var column = tabularDataResource . Data . Select ( row =>
28
+ {
29
+ if ( row is IDictionary < string , object > dictionary )
30
+ {
31
+ return dictionary [ fieldName ] ;
32
+ }
33
+ else
34
+ {
35
+ return row . FirstOrDefault ( kvp => kvp . Key == fieldName ) . Value ;
36
+ }
37
+ } ) ;
38
+
25
39
switch ( fieldDescriptor . Type )
26
40
{
27
41
case TableSchemaFieldType . Number :
28
- dataFrame . Columns . Add ( new DoubleDataFrameColumn ( fieldDescriptor . Name , tabularDataResource . Data . Select ( d => Convert . ToDouble ( d [ fieldDescriptor . Name ] ) ) ) ) ;
42
+ dataFrame . Columns . Add ( new DoubleDataFrameColumn ( fieldDescriptor . Name , column . Select ( Convert . ToDouble ) ) ) ;
29
43
break ;
30
44
case TableSchemaFieldType . Integer :
31
- dataFrame . Columns . Add ( new Int64DataFrameColumn ( fieldDescriptor . Name , tabularDataResource . Data . Select ( d => Convert . ToInt64 ( d [ fieldDescriptor . Name ] ) ) ) ) ;
45
+ dataFrame . Columns . Add ( new Int64DataFrameColumn ( fieldDescriptor . Name , column . Select ( Convert . ToInt64 ) ) ) ;
32
46
break ;
33
47
case TableSchemaFieldType . Boolean :
34
- dataFrame . Columns . Add ( new BooleanDataFrameColumn ( fieldDescriptor . Name , tabularDataResource . Data . Select ( d => Convert . ToBoolean ( d [ fieldDescriptor . Name ] ) ) ) ) ;
48
+ dataFrame . Columns . Add ( new BooleanDataFrameColumn ( fieldDescriptor . Name , column . Select ( Convert . ToBoolean ) ) ) ;
35
49
break ;
36
50
case TableSchemaFieldType . String :
37
- dataFrame . Columns . Add ( new StringDataFrameColumn ( fieldDescriptor . Name , tabularDataResource . Data . Select ( d => Convert . ToString ( d [ fieldDescriptor . Name ] ) ) ) ) ;
51
+ dataFrame . Columns . Add ( new StringDataFrameColumn ( fieldDescriptor . Name , column . Select ( Convert . ToString ) ) ) ;
38
52
break ;
39
53
default :
40
54
throw new ArgumentOutOfRangeException ( ) ;
0 commit comments