Skip to content

BAIGUANGMEI/datago

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DataGo

高性能 Go 语言数据分析库,灵感来自 Python pandas。

特性

  • DataFrame & Series:为 Go 开发者提供熟悉的 pandas 风格 API
  • 高性能:Excel 读取速度是 pandas 的 2 倍
  • GroupBy:强大的分组聚合操作(Sum、Mean、Count 等)
  • Merge/Join:SQL 风格的表连接(Inner、Left、Right、Outer)
  • 并行处理:利用 Go 并发优势加速大数据处理
  • Excel & CSV:完整支持数据文件读写

安装

go get github.com/BAIGUANGMEI/datago

需要 Go 1.22+

快速开始

package main import ( "fmt" "github.com/BAIGUANGMEI/datago/dataframe" "github.com/BAIGUANGMEI/datago/io" ) func main() { // 创建 DataFrame df, _ := dataframe.New(map[string][]interface{}{ "name": {"Alice", "Bob", "Charlie"}, "age": {25, 30, 35}, "salary": {50000.0, 60000.0, 70000.0}, }) // 筛选和排序 filtered := df.Filter(func(r dataframe.Row) bool { return r.Get("age").(int) >= 30 }).SortBy("salary", dataframe.Descending) // GroupBy 聚合 gb, _ := df.GroupBy("age") stats := gb.Mean("salary") // 读写文件 excelDF, _ := io.ReadExcel("data.xlsx", io.ExcelOptions{HasHeader: true}) _ = io.WriteCSV("output.csv", df, io.CSVWriteOptions{}) }

性能基准

ReadExcel 性能测试

数据集 DataGo pandas polars
15K 行 × 11 列 0.21s 0.51s 0.10s
271K 行 × 16 列 5.76s 11.01s 2.18s

DataGo 读取 Excel 速度约为 pandas 的 2 倍

文档

在线文档:https://baiguangmei.github.io/datago/

API 概览

DataFrame 操作

// 创建 df, _ := dataframe.New(data) df, _ := dataframe.FromRecords(records, columns) // 选择 df.Head(n) / df.Tail(n) df.Select("col1", "col2") df.Filter(func(row Row) bool { ... }) df.ILoc(rowStart, rowEnd, colStart, colEnd) // 操作 df.AddColumn("name", series) df.Drop("col1", "col2") df.Rename(map[string]string{"old": "new"}) df.SortBy("col", Ascending) // 统计 df.Describe() df.ParallelSum() / df.ParallelMean()

GroupBy 操作

gb, _ := df.GroupBy("category") gb.Sum("value") gb.Mean("value") gb.Agg(map[string][]AggFunc{...}) gb.Apply(func(*DataFrame) *DataFrame { ... }) gb.Filter(func(*DataFrame) bool { ... })

Merge/Join 操作

// Inner/Left/Right/Outer 连接 result, _ := dataframe.Merge(left, right, MergeOptions{ How: InnerJoin, On: []string{"key"}, }) // 不同列名连接 result, _ := left.MergeOn(right, []string{"left_key"}, []string{"right_key"}, LeftJoin, )

并行处理

// 并行 Apply result := series.ParallelApply(func(v interface{}) interface{} { ... }) // 并行筛选 result := df.ParallelFilter(func(row Row) bool { ... }) // 并行聚合 sums := df.ParallelSum() gb.ParallelAgg(aggFuncs)

I/O 操作

// Excel df, _ := io.ReadExcel("file.xlsx", ExcelOptions{HasHeader: true}) io.WriteExcel("output.xlsx", df, ExcelWriteOptions{}) // CSV df, _ := io.ReadCSV("file.csv", CSVOptions{HasHeader: true}) io.WriteCSV("output.csv", df, CSVWriteOptions{})

许可证

MIT License

About

A Go library for data analysis like pandas

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors