Dataframe 如何根据特定值拆分Golang中的结构

Dataframe 如何根据特定值拆分Golang中的结构,dataframe,go,data-structures,struct,Dataframe,Go,Data Structures,Struct,我有Python和R的背景,我习惯于使用数据帧。 如果我有下表: >>> table ID Phone Email Value ------------------------------ ID1 15555555555 None None ID2 None 3Email None ID3 3123 4Email aaa 从表导出两个表如下所示: >>> table1=table[["I

我有Python和R的背景,我习惯于使用数据帧。 如果我有下表:

>>> table

ID        Phone   Email Value
------------------------------
ID1  15555555555    None  None
ID2         None  3Email  None
ID3         3123  4Email   aaa
导出两个表如下所示:

>>> table1=table[["ID","Phone","Email"]]
>>> table1

ID        Phone   Email
------------------------
ID1  15555555555    None
ID2         None  3Email
ID3         3123  4Email

>>> table2=table[["ID","Value"]]
>>> table2

ID Value
---------
ID1  None
ID2  None
ID3   aaa
现在,我正试图与Golang实现同样的目标。以下是我的第一步:

package main

import (
    "fmt"

)

type Identification struct {
    ID    string
    Phone int64
    Email string
    Value string
}

func main() {
    // define slice of Identification
    var idents []Identification
    idents = append(idents, Identification{ID: "ID1", Phone: 15555555555})
    idents = append(idents, Identification{ID: "ID2", Email: "3Email"})
    idents = append(idents, Identification{ID: "ID3",   Phone:3123, Email: "4Email", Value: "aaa"})

    fmt.Println(idents)

}
结果:

[{ID1 15555555555  } {ID2 0 3Email } {ID3 3123 3Email aaa}]

我的问题是,如何像在示例中使用Python那样分割
idents

无法拆分go中的结构,您所能做的就是重置要删除的字段的值

您需要一个
映射
,以实现Python中的内容。但是Go是一种类型化语言,因此为了存储任意数据,可以使用
接口{}
类型。因此,在存储不同类型的数据时,需要使用
map[string]接口{}
,否则将所有内容都设置为字符串并使用
map[string]string

那么对于切片,WellGo在标准包中没有任何东西可以切片列。幸运的是,有些人开发了开源软件包,使您的生活更轻松:)我建议您使用这个软件包

如果你必须自己做,你可以这样做:

主程序包
输入“fmt”
类型表[]映射[字符串]接口{}
func(t表)列(列…字符串)表{
//创建新的结果表
var newTable=make(表,长度(t))
//循环遍历表并填充新表
对于i,m:=范围t{
var n=make(映射[字符串]接口{},len(cols))
对于u,col:=范围cols{
如果v,ok:=m[col];ok{
n[col]=v
}
}
新表[i]=n
}
返回新表
}
func main(){
//定义标识的切片
var t=表{
{
“ID”:“1”,
“电话”:155555,
},
{
“ID”:“2”,
“电子邮件”:“3电子邮件”,
},
{
“ID”:“3”,
“电子邮件”:“4电子邮件”,
“价值”:“aaaa”,
“电话”:“123”,
},
}
fmt.Println(t.Println(“ID”,“Phone”))/[map[ID:1 Phone:155555]map[ID:2]map[ID:3 Phone:123]]
}

A
struct
具有固定的“形状”,因此不能直接执行此操作。你为什么要这么做?您可以将字段留在那里,在处理时忽略它们。这似乎是一个XY问题。您的最终目标是什么?@Flimzy我的目标是从源中导入行数据,然后根据特定的键对其进行切片,并将其插入数据库中的不同表中。然后,无需在结构中对其进行“切片”。只需将您关心的列插入相应的表中即可。