如何将具有嵌套对象和嵌套集合的对象展平为 Deedle 数据框?
How to flatten an object with nested object and nested collection into Deedle dataframe?
我有以下 class 定义:
public class SomeObject {
public string Id { get; set; }
public string Name { get; set; }
public SomeOtherObject SomeOtherObject { get; set; }
public SomeAnotherObject[] SomeAnotherObjectArr { get; set; }
}
public class SomeOtherObject {
public string OtherObjectName { get; set; }
//other properties omitted for brevity
}
public class SomeAnotherObject {
public string AnotherObjectName { get; set; }
public bool Flag { get; set; }
}
我正在读取反序列化为 SomeObject
的 json 文件。目标是实现如下所示的数据框:
Id Name OtherObjectName AnotherObjectName Flag
1 Name1 OtherObjectName1 AnotherObjectName1 false
1 Name1 OtherObjectName1 AnotherObjectName2 true
我试过的代码是:
SomeObject someObject = GetDeserialisedJson();
var df = Frame.FromRecords(new [] { someObject });
df.Print();
它打印的输出是:
Id Name SomeOtherObject SomeAnotherObjectArr
1 Name1 SomeOtherObject { OtherObjectName = someValue } Model.SomeAnotherObject[]
基本上,嵌套对象不会自动展平,如果是嵌套数组,它只会打印 namespace.classname[]
到目前为止,对象具有简单的基元结构,一切都很好。在我的案例中如何实现所需的数据帧结构?我是这个范例的绝对初学者,所以欢迎任何替代方法或建议。
数据框有ExpandColumns
操作,解决了你的部分问题。该操作将包含对象的所有列扩展为包含这些对象属性的多个列:
// Argument indicates how deep this should go
var expanded = df.Expand(1)
这会将 SomeOtherObject
扩展为 SomeOtherObject.OtherObjectName
,但这不处理数组(它不会将单行变成多行)。
对于数组,我认为没有任何好的内置解决方案(除了查看原始数据并对其进行操作之外)。所以我的建议可能是先使用其他工具将 JSON 数据转换为 CSV,然后将其加载到 Deedle 中。
我有以下 class 定义:
public class SomeObject {
public string Id { get; set; }
public string Name { get; set; }
public SomeOtherObject SomeOtherObject { get; set; }
public SomeAnotherObject[] SomeAnotherObjectArr { get; set; }
}
public class SomeOtherObject {
public string OtherObjectName { get; set; }
//other properties omitted for brevity
}
public class SomeAnotherObject {
public string AnotherObjectName { get; set; }
public bool Flag { get; set; }
}
我正在读取反序列化为 SomeObject
的 json 文件。目标是实现如下所示的数据框:
Id Name OtherObjectName AnotherObjectName Flag
1 Name1 OtherObjectName1 AnotherObjectName1 false
1 Name1 OtherObjectName1 AnotherObjectName2 true
我试过的代码是:
SomeObject someObject = GetDeserialisedJson();
var df = Frame.FromRecords(new [] { someObject });
df.Print();
它打印的输出是:
Id Name SomeOtherObject SomeAnotherObjectArr
1 Name1 SomeOtherObject { OtherObjectName = someValue } Model.SomeAnotherObject[]
基本上,嵌套对象不会自动展平,如果是嵌套数组,它只会打印 namespace.classname[]
到目前为止,对象具有简单的基元结构,一切都很好。在我的案例中如何实现所需的数据帧结构?我是这个范例的绝对初学者,所以欢迎任何替代方法或建议。
数据框有ExpandColumns
操作,解决了你的部分问题。该操作将包含对象的所有列扩展为包含这些对象属性的多个列:
// Argument indicates how deep this should go
var expanded = df.Expand(1)
这会将 SomeOtherObject
扩展为 SomeOtherObject.OtherObjectName
,但这不处理数组(它不会将单行变成多行)。
对于数组,我认为没有任何好的内置解决方案(除了查看原始数据并对其进行操作之外)。所以我的建议可能是先使用其他工具将 JSON 数据转换为 CSV,然后将其加载到 Deedle 中。