Dataframe 如何根据特定值拆分Golang中的结构
我有Python和R的背景,我习惯于使用数据帧。 如果我有下表: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
>>> 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]]
}
Astruct
具有固定的“形状”,因此不能直接执行此操作。你为什么要这么做?您可以将字段留在那里,在处理时忽略它们。这似乎是一个XY问题。您的最终目标是什么?@Flimzy我的目标是从源中导入行数据,然后根据特定的键对其进行切片,并将其插入数据库中的不同表中。然后,无需在结构中对其进行“切片”。只需将您关心的列插入相应的表中即可。