gpt4 book ai didi

dataframe - Golang中如何根据特定值拆分结构体

转载 作者:数据小太阳 更新时间:2023-10-29 03:09:07 25 4
gpt4 key购买 nike

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

>>> table

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

table 派生两个表看起来像这样:

>>> 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 进行 slice ?

最佳答案

go 中的结构无法拆分,您只能重置要删除的字段的值。

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

然后对于 slice ,well go 在标准包中没有任何东西可以对列进行 slice 。幸运的是,有些人致力于开源软件包,让您的生活更轻松 :) 我建议您使用一个 https://github.com/go-gota/gota

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

package main

import "fmt"

type table []map[string]interface{}

func (t table) sliceColumns(cols ...string) table {
// create our new resulting table
var newTable = make(table, len(t))

// loop through table and populate our newTable
for i, m := range t {

var n = make(map[string]interface{}, len(cols))
for _, col := range cols {
if v, ok := m[col]; ok {
n[col] = v
}
}

newTable[i] = n
}

return newTable
}

func main() {
// define slice of Identification
var t = table{
{
"ID": "1",
"Phone": 155555,
},
{
"ID": "2",
"Email": "3Email",
},
{
"ID": "3",
"Email": "4Email",
"Value": "aaaa",
"Phone": "123",
},
}

fmt.Println(t.sliceColumns("ID", "Phone")) // [map[ID:1 Phone:155555] map[ID:2] map[ID:3 Phone:123]]
}

关于dataframe - Golang中如何根据特定值拆分结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55279179/

25 4 0
文章推荐: javascript - 将键盘焦点设置为
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com