{"id":13413737,"url":"https://github.com/rocketlaunchr/dataframe-go","last_synced_at":"2025-05-15T20:03:33.942Z","repository":{"id":34654172,"uuid":"151083521","full_name":"rocketlaunchr/dataframe-go","owner":"rocketlaunchr","description":"DataFrames for Go: For statistics, machine-learning, and data manipulation/exploration","archived":false,"fork":false,"pushed_at":"2022-04-02T10:46:59.000Z","size":1033,"stargazers_count":1247,"open_issues_count":20,"forks_count":98,"subscribers_count":36,"default_branch":"master","last_synced_at":"2025-05-10T22:30:01.116Z","etag":null,"topics":["data-science","dataframe","dataframes","go","golang","machine-learning","pandas","pandas-dataframe","python","statistics"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rocketlaunchr.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":"rocketlaunchr"}},"created_at":"2018-10-01T12:19:31.000Z","updated_at":"2025-05-10T06:10:27.000Z","dependencies_parsed_at":"2022-08-03T06:45:39.421Z","dependency_job_id":null,"html_url":"https://github.com/rocketlaunchr/dataframe-go","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rocketlaunchr%2Fdataframe-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rocketlaunchr%2Fdataframe-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rocketlaunchr%2Fdataframe-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rocketlaunchr%2Fdataframe-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rocketlaunchr","download_url":"https://codeload.github.com/rocketlaunchr/dataframe-go/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254414493,"owners_count":22067271,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-science","dataframe","dataframes","go","golang","machine-learning","pandas","pandas-dataframe","python","statistics"],"created_at":"2024-07-30T20:01:47.797Z","updated_at":"2025-05-15T20:03:32.209Z","avatar_url":"https://github.com/rocketlaunchr.png","language":"Go","readme":"\u003cp align=\"right\"\u003e\n  ⭐ \u0026nbsp;\u0026nbsp;\u003cstrong\u003ethe project to show your appreciation.\u003c/strong\u003e :arrow_upper_right:\n\u003c/p\u003e\n\n\u003cp align=\"right\"\u003e\n  \u003ca href=\"http://godoc.org/github.com/rocketlaunchr/dataframe-go\"\u003e\u003cimg src=\"http://godoc.org/github.com/rocketlaunchr/dataframe-go?status.svg\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://goreportcard.com/report/github.com/rocketlaunchr/dataframe-go\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/rocketlaunchr/dataframe-go\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://gocover.io/github.com/rocketlaunchr/dataframe-go\"\u003e\u003cimg src=\"http://gocover.io/_badge/github.com/rocketlaunchr/dataframe-go\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/rocketlaunchr/dataframe-go/raw/master/assets/logo.png\" alt=\"dataframe-go\" /\u003e\n\u003c/p\u003e\n\nDataframes are used for statistics, machine-learning, and data manipulation/exploration. You can think of a Dataframe as an excel spreadsheet.\nThis package is designed to be light-weight and intuitive.\n\n⚠️ The package is production ready but the API is not stable yet. Once Go 1.18 (Generics) is introduced, the  **ENTIRE** package will be rewritten. For example, there will only be 1 generic Series type. After that, version `1.0.0` will be tagged.\n\nIt is recommended your package manager locks to a commit id instead of the master branch directly. ⚠️\n\n\n# Features\n\n1. Importing from CSV, JSONL, Parquet, MySQL \u0026 PostgreSQL\n2. Exporting to CSV, JSONL, Excel, Parquet, MySQL \u0026 PostgreSQL\n3. Developer Friendly\n4. Flexible - Create custom Series (custom data types)\n5. Performant\n6. Interoperability with [gonum package](https://godoc.org/gonum.org/v1/gonum).\n7. [pandas sub-package](https://pandas.pydata.org/pandas-docs/stable/reference/frame.html) ![Help Required](https://img.shields.io/badge/help-required-blueviolet)\n8. Fake data generation\n9. Interpolation (ForwardFill, BackwardFill, Linear, Spline, Lagrange)\n10. Time-series Forecasting (SES, Holt-Winters)\n11. Math functions\n12. Plotting (cross-platform)\n\nSee [Tutorial](https://github.com/rocketlaunchr/dataframe-go#tutorial) here.\n\n## Installation\n\n```\ngo get -u github.com/rocketlaunchr/dataframe-go\n```\n\n```go\nimport dataframe \"github.com/rocketlaunchr/dataframe-go\"\n```\n\n# DataFrames\n\n## Creating a DataFrame\n\n```go\n\ns1 := dataframe.NewSeriesInt64(\"day\", nil, 1, 2, 3, 4, 5, 6, 7, 8)\ns2 := dataframe.NewSeriesFloat64(\"sales\", nil, 50.3, 23.4, 56.2, nil, nil, 84.2, 72, 89)\ndf := dataframe.NewDataFrame(s1, s2)\n\nfmt.Print(df.Table())\n  \nOUTPUT:\n+-----+-------+---------+\n|     |  DAY  |  SALES  |\n+-----+-------+---------+\n| 0:  |   1   |  50.3   |\n| 1:  |   2   |  23.4   |\n| 2:  |   3   |  56.2   |\n| 3:  |   4   |   NaN   |\n| 4:  |   5   |   NaN   |\n| 5:  |   6   |  84.2   |\n| 6:  |   7   |   72    |\n| 7:  |   8   |   89    |\n+-----+-------+---------+\n| 8X2 | INT64 | FLOAT64 |\n+-----+-------+---------+\n\n```\n[![Go Playground](https://img.shields.io/badge/Go-Playground-5593c7.svg?labelColor=41c3f3\u0026style=for-the-badge)](https://play.golang.org/p/eC5HYAEHjNI)\n\n## Insert and Remove Row\n\n```go\n\ndf.Append(nil, 9, 123.6)\n\ndf.Append(nil, map[string]interface{}{\n\t\"day\":   10,\n\t\"sales\": nil,\n})\n\ndf.Remove(0)\n\nOUTPUT:\n+-----+-------+---------+\n|     |  DAY  |  SALES  |\n+-----+-------+---------+\n| 0:  |   2   |  23.4   |\n| 1:  |   3   |  56.2   |\n| 2:  |   4   |   NaN   |\n| 3:  |   5   |   NaN   |\n| 4:  |   6   |  84.2   |\n| 5:  |   7   |   72    |\n| 6:  |   8   |   89    |\n| 7:  |   9   |  123.6  |\n| 8:  |  10   |   NaN   |\n+-----+-------+---------+\n| 9X2 | INT64 | FLOAT64 |\n+-----+-------+---------+\n```\n[![Go Playground](https://img.shields.io/badge/Go-Playground-5593c7.svg?labelColor=41c3f3\u0026style=for-the-badge)](https://play.golang.org/p/xwW_410vQ2p)\n\n## Update Row\n\n```go\n\ndf.UpdateRow(0, nil, map[string]interface{}{\n\t\"day\":   3,\n\t\"sales\": 45,\n})\n\n```\n\n## Sorting\n\n```go\n\nsks := []dataframe.SortKey{\n\t{Key: \"sales\", Desc: true},\n\t{Key: \"day\", Desc: true},\n}\n\ndf.Sort(ctx, sks)\n\nOUTPUT:\n+-----+-------+---------+\n|     |  DAY  |  SALES  |\n+-----+-------+---------+\n| 0:  |   9   |  123.6  |\n| 1:  |   8   |   89    |\n| 2:  |   6   |  84.2   |\n| 3:  |   7   |   72    |\n| 4:  |   3   |  56.2   |\n| 5:  |   2   |  23.4   |\n| 6:  |  10   |   NaN   |\n| 7:  |   5   |   NaN   |\n| 8:  |   4   |   NaN   |\n+-----+-------+---------+\n| 9X2 | INT64 | FLOAT64 |\n+-----+-------+---------+\n```\n[![Go Playground](https://img.shields.io/badge/Go-Playground-5593c7.svg?labelColor=41c3f3\u0026style=for-the-badge)](https://play.golang.org/p/lsJkKw3ZUJq)\n\n## Iterating\n\nYou can change the step and starting row. It may be wise to lock the DataFrame before iterating.\n\nThe returned value is a map containing the name of the series (`string`) and the index of the series (`int`) as keys.\n\n```go\n\niterator := df.ValuesIterator(dataframe.ValuesOptions{0, 1, true}) // Don't apply read lock because we are write locking from outside.\n\ndf.Lock()\nfor {\n\trow, vals, _ := iterator()\n\tif row == nil {\n\t\tbreak\n\t}\n\tfmt.Println(*row, vals)\n}\ndf.Unlock()\n\nOUTPUT:\n0 map[day:1 0:1 sales:50.3 1:50.3]\n1 map[sales:23.4 1:23.4 day:2 0:2]\n2 map[day:3 0:3 sales:56.2 1:56.2]\n3 map[1:\u003cnil\u003e day:4 0:4 sales:\u003cnil\u003e]\n4 map[day:5 0:5 sales:\u003cnil\u003e 1:\u003cnil\u003e]\n5 map[sales:84.2 1:84.2 day:6 0:6]\n6 map[day:7 0:7 sales:72 1:72]\n7 map[day:8 0:8 sales:89 1:89]\n```\n[![Go Playground](https://img.shields.io/badge/Go-Playground-5593c7.svg?labelColor=41c3f3\u0026style=for-the-badge)](https://play.golang.org/p/eqjvu-vO8sr)\n\n## Statistics\n\nYou can easily calculate statistics for a Series using the [gonum](https://godoc.org/gonum.org/v1/gonum/stat) or [montanaflynn/stats](https://godoc.org/github.com/montanaflynn/stats) package.\n\n`SeriesFloat64` and `SeriesTime` provide access to the exported `Values` field to seamlessly interoperate with external math-based packages.\n\n### Example\n\nSome series provide easy conversion using the `ToSeriesFloat64` method.\n\n```go\nimport \"gonum.org/v1/gonum/stat\"\n\ns := dataframe.NewSeriesInt64(\"random\", nil, 1, 2, 3, 4, 5, 6, 7, 8)\nsf, _ := s.ToSeriesFloat64(ctx)\n```\n\n### Mean\n\n```go\nmean := stat.Mean(sf.Values, nil)\n```\n\n### Median\n\n```go\nimport \"github.com/montanaflynn/stats\"\nmedian, _ := stats.Median(sf.Values)\n```\n\n### Standard Deviation\n\n```go\nstd := stat.StdDev(sf.Values, nil)\n```\n\n## Plotting (cross-platform)\n\n```go\nimport (\n\tchart \"github.com/wcharczuk/go-chart\"\n\t\"github.com/rocketlaunchr/dataframe-go/plot\"\n\twc \"github.com/rocketlaunchr/dataframe-go/plot/wcharczuk/go-chart\"\n)\n\nsales := dataframe.NewSeriesFloat64(\"sales\", nil, 50.3, nil, 23.4, 56.2, 89, 32, 84.2, 72, 89)\ncs, _ := wc.S(ctx, sales, nil, nil)\n\ngraph := chart.Chart{Series: []chart.Series{cs}}\n\nplt, _ := plot.Open(\"Monthly sales\", 450, 300)\ngraph.Render(chart.SVG, plt)\nplt.Display(plot.None)\n\u003c-plt.Closed\n\n```\n\nOutput:\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/rocketlaunchr/dataframe-go/raw/master/assets/plot.png\" alt=\"plot\" /\u003e\n\u003c/p\u003e\n\n## Math Functions\n\n```go\nimport \"github.com/rocketlaunchr/dataframe-go/math/funcs\"\n\nres := 24\nsx := dataframe.NewSeriesFloat64(\"x\", nil, utils.Float64Seq(1, float64(res), 1))\nsy := dataframe.NewSeriesFloat64(\"y\", \u0026dataframe.SeriesInit{Size: res})\ndf := dataframe.NewDataFrame(sx, sy)\n\nfn := funcs.RegFunc(\"sin(2*𝜋*x/24)\")\nfuncs.Evaluate(ctx, df, fn, 1)\n```\n[![Go Playground](https://img.shields.io/badge/Go-Playground-5593c7.svg?labelColor=41c3f3\u0026style=for-the-badge)](https://play.golang.org/p/f4GfS2rUjaM)\n\nOutput:\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/rocketlaunchr/dataframe-go/raw/master/assets/sine.png\" alt=\"sine wave\" /\u003e\n\u003c/p\u003e\n\n## Importing Data\n\nThe `imports` sub-package has support for importing csv, jsonl, parquet, and directly from a SQL database. The `DictateDataType` option can be set to specify the true underlying data type. Alternatively, `InferDataTypes` option can be set.\n\n### CSV\n\n```go\ncsvStr := `\nCountry,Date,Age,Amount,Id\n\"United States\",2012-02-01,50,112.1,01234\n\"United States\",2012-02-01,32,321.31,54320\n\"United Kingdom\",2012-02-01,17,18.2,12345\n\"United States\",2012-02-01,32,321.31,54320\n\"United Kingdom\",2012-05-07,NA,18.2,12345\n\"United States\",2012-02-01,32,321.31,54320\n\"United States\",2012-02-01,32,321.31,54320\nSpain,2012-02-01,66,555.42,00241\n`\ndf, err := imports.LoadFromCSV(ctx, strings.NewReader(csvStr))\n\nOUTPUT:\n+-----+----------------+------------+-------+---------+-------+\n|     |    COUNTRY     |    DATE    |  AGE  | AMOUNT  |  ID   |\n+-----+----------------+------------+-------+---------+-------+\n| 0:  | United States  | 2012-02-01 |  50   |  112.1  | 1234  |\n| 1:  | United States  | 2012-02-01 |  32   | 321.31  | 54320 |\n| 2:  | United Kingdom | 2012-02-01 |  17   |  18.2   | 12345 |\n| 3:  | United States  | 2012-02-01 |  32   | 321.31  | 54320 |\n| 4:  | United Kingdom | 2015-05-07 |  NaN  |  18.2   | 12345 |\n| 5:  | United States  | 2012-02-01 |  32   | 321.31  | 54320 |\n| 6:  | United States  | 2012-02-01 |  32   | 321.31  | 54320 |\n| 7:  |     Spain      | 2012-02-01 |  66   | 555.42  |  241  |\n+-----+----------------+------------+-------+---------+-------+\n| 8X5 |     STRING     |    TIME    | INT64 | FLOAT64 | INT64 |\n+-----+----------------+------------+-------+---------+-------+\n```\n[![Go Playground](https://img.shields.io/badge/Go-Playground-5593c7.svg?labelColor=41c3f3\u0026style=for-the-badge)](https://play.golang.org/p/7hyUXnRy1pR)\n\n## Exporting Data\n\nThe `exports` sub-package has support for exporting to csv, jsonl, parquet, Excel and directly to a SQL database.\n\n\n## Optimizations\n\n* If you know the number of rows in advance, you can set the capacity of the underlying slice of a series using `SeriesInit{}`. This will preallocate memory and provide speed improvements. \n\n# Generic Series\n\nOut of the box, there is support for `string`, `time.Time`, `float64` and `int64`. Automatic support exists for `float32` and all types of integers. There is a convenience function provided for dealing with `bool`. There is also support for `complex128` inside the `xseries` subpackage.\n\nThere may be times that you want to use your own custom data types. You can either implement your own `Series` type (more performant) or use the **Generic Series** (more convenient).\n\n## civil.Date\n\n```go\nimport \"time\"\nimport \"cloud.google.com/go/civil\"\n\nsg := dataframe.NewSeriesGeneric(\"date\", civil.Date{}, nil, civil.Date{2018, time.May, 01}, civil.Date{2018, time.May, 02}, civil.Date{2018, time.May, 03})\ns2 := dataframe.NewSeriesFloat64(\"sales\", nil, 50.3, 23.4, 56.2)\n\ndf := dataframe.NewDataFrame(sg, s2)\n\nOUTPUT:\n+-----+------------+---------+\n|     |    DATE    |  SALES  |\n+-----+------------+---------+\n| 0:  | 2018-05-01 |  50.3   |\n| 1:  | 2018-05-02 |  23.4   |\n| 2:  | 2018-05-03 |  56.2   |\n+-----+------------+---------+\n| 3X2 | CIVIL DATE | FLOAT64 |\n+-----+------------+---------+\n\n```\n\n# Tutorial\n\n## Create some fake data\n\nLet's create a list of 8 \"fake\" employees with a name, title and base hourly wage rate.\n\n```go\nimport \"golang.org/x/exp/rand\"\nimport \"rocketlaunchr/dataframe-go/utils/faker\"\n\nsrc := rand.NewSource(uint64(time.Now().UTC().UnixNano()))\ndf := faker.NewDataFrame(8, src, faker.S(\"name\", 0, \"Name\"), faker.S(\"title\", 0.5, \"JobTitle\"), faker.S(\"base rate\", 0, \"Number\", 15, 50))\n```\n\n```go\n+-----+----------------+----------------+-----------+\n|     |      NAME      |     TITLE      | BASE RATE |\n+-----+----------------+----------------+-----------+\n| 0:  | Cordia Jacobi  |   Consultant   |    42     |\n| 1:  | Nickolas Emard |      NaN       |    22     |\n| 2:  | Hollis Dickens | Representative |    22     |\n| 3:  | Stacy Dietrich |      NaN       |    43     |\n| 4:  |  Aleen Legros  |    Officer     |    21     |\n| 5:  |  Adelia Metz   |   Architect    |    18     |\n| 6:  | Sunny Gerlach  |      NaN       |    28     |\n| 7:  | Austin Hackett |      NaN       |    39     |\n+-----+----------------+----------------+-----------+\n| 8X3 |     STRING     |     STRING     |   INT64   |\n+-----+----------------+----------------+-----------+\n```\n\n## Apply Function\n\nLet's give a promotion to everyone by doubling their salary.\n\n```go\ns := df.Series[2]\n\napplyFn := dataframe.ApplySeriesFn(func(val interface{}, row, nRows int) interface{} {\n\treturn 2 * val.(int64)\n})\n\ndataframe.Apply(ctx, s, applyFn, dataframe.FilterOptions{InPlace: true})\n```\n\n```go\n+-----+----------------+----------------+-----------+\n|     |      NAME      |     TITLE      | BASE RATE |\n+-----+----------------+----------------+-----------+\n| 0:  | Cordia Jacobi  |   Consultant   |    84     |\n| 1:  | Nickolas Emard |      NaN       |    44     |\n| 2:  | Hollis Dickens | Representative |    44     |\n| 3:  | Stacy Dietrich |      NaN       |    86     |\n| 4:  |  Aleen Legros  |    Officer     |    42     |\n| 5:  |  Adelia Metz   |   Architect    |    36     |\n| 6:  | Sunny Gerlach  |      NaN       |    56     |\n| 7:  | Austin Hackett |      NaN       |    78     |\n+-----+----------------+----------------+-----------+\n| 8X3 |     STRING     |     STRING     |   INT64   |\n+-----+----------------+----------------+-----------+\n```\n\n\n## Create a Time series\n\nLet's inform all employees separately on sequential days.\n\n```go\nimport \"rocketlaunchr/dataframe-go/utils/utime\"\n\nmts, _ := utime.NewSeriesTime(ctx, \"meeting time\", \"1D\", time.Now().UTC(), false, utime.NewSeriesTimeOptions{Size: \u0026[]int{8}[0]})\ndf.AddSeries(mts, nil)\n```\n\n```go\n+-----+----------------+----------------+-----------+--------------------------------+\n|     |      NAME      |     TITLE      | BASE RATE |          MEETING TIME          |\n+-----+----------------+----------------+-----------+--------------------------------+\n| 0:  | Cordia Jacobi  |   Consultant   |    84     |   2020-02-02 23:13:53.015324   |\n|     |                |                |           |           +0000 UTC            |\n| 1:  | Nickolas Emard |      NaN       |    44     |   2020-02-03 23:13:53.015324   |\n|     |                |                |           |           +0000 UTC            |\n| 2:  | Hollis Dickens | Representative |    44     |   2020-02-04 23:13:53.015324   |\n|     |                |                |           |           +0000 UTC            |\n| 3:  | Stacy Dietrich |      NaN       |    86     |   2020-02-05 23:13:53.015324   |\n|     |                |                |           |           +0000 UTC            |\n| 4:  |  Aleen Legros  |    Officer     |    42     |   2020-02-06 23:13:53.015324   |\n|     |                |                |           |           +0000 UTC            |\n| 5:  |  Adelia Metz   |   Architect    |    36     |   2020-02-07 23:13:53.015324   |\n|     |                |                |           |           +0000 UTC            |\n| 6:  | Sunny Gerlach  |      NaN       |    56     |   2020-02-08 23:13:53.015324   |\n|     |                |                |           |           +0000 UTC            |\n| 7:  | Austin Hackett |      NaN       |    78     |   2020-02-09 23:13:53.015324   |\n|     |                |                |           |           +0000 UTC            |\n+-----+----------------+----------------+-----------+--------------------------------+\n| 8X4 |     STRING     |     STRING     |   INT64   |              TIME              |\n+-----+----------------+----------------+-----------+--------------------------------+\n```\n\n## Filtering\n\nLet's filter out our senior employees (they have titles) for no reason.\n\n```go\nfilterFn := dataframe.FilterDataFrameFn(func(vals map[interface{}]interface{}, row, nRows int) (dataframe.FilterAction, error) {\n\tif vals[\"title\"] == nil {\n\t\treturn dataframe.DROP, nil\n\t}\n\treturn dataframe.KEEP, nil\n})\n\nseniors, _ := dataframe.Filter(ctx, df, filterFn)\n```\n\n```go\n+-----+----------------+----------------+-----------+--------------------------------+\n|     |      NAME      |     TITLE      | BASE RATE |          MEETING TIME          |\n+-----+----------------+----------------+-----------+--------------------------------+\n| 0:  | Cordia Jacobi  |   Consultant   |    84     |   2020-02-02 23:13:53.015324   |\n|     |                |                |           |           +0000 UTC            |\n| 1:  | Hollis Dickens | Representative |    44     |   2020-02-04 23:13:53.015324   |\n|     |                |                |           |           +0000 UTC            |\n| 2:  |  Aleen Legros  |    Officer     |    42     |   2020-02-06 23:13:53.015324   |\n|     |                |                |           |           +0000 UTC            |\n| 3:  |  Adelia Metz   |   Architect    |    36     |   2020-02-07 23:13:53.015324   |\n|     |                |                |           |           +0000 UTC            |\n+-----+----------------+----------------+-----------+--------------------------------+\n| 4X4 |     STRING     |     STRING     |   INT64   |              TIME              |\n+-----+----------------+----------------+-----------+--------------------------------+\n```\n\n\n## Other useful packages\n\n- [awesome-svelte](https://github.com/rocketlaunchr/awesome-svelte) - Resources for killing react\n- [dbq](https://github.com/rocketlaunchr/dbq) - Zero boilerplate database operations for Go\n- [electron-alert](https://github.com/rocketlaunchr/electron-alert) - SweetAlert2 for Electron Applications\n- [google-search](https://github.com/rocketlaunchr/google-search) - Scrape google search results\n- [igo](https://github.com/rocketlaunchr/igo) - A Go transpiler with cool new syntax such as fordefer (defer for for-loops)\n- [mysql-go](https://github.com/rocketlaunchr/mysql-go) - Properly cancel slow MySQL queries\n- [react](https://github.com/rocketlaunchr/react) - Build front end applications using Go\n- [remember-go](https://github.com/rocketlaunchr/remember-go) - Cache slow database queries\n- [testing-go](https://github.com/rocketlaunchr/testing-go) - Testing framework for unit testing\n\n#\n\n### Legal Information\n\nThe license is a modified MIT license. Refer to `LICENSE` file for more details.\n\n**© 2018-21 PJ Engineering and Business Solutions Pty. Ltd.**\n","funding_links":["https://github.com/sponsors/rocketlaunchr"],"categories":["开源类库","Science and Data Analysis","Open source library","Go","科学与数据分析","DataFrames","数据分析与数据科学","Golang","Relational Databases","Repositories"],"sub_categories":["数据结构","HTTP Clients","Data Structure","[Tools](#tools-1)","HTTP客户端","Vector Database","查询语","Numerical Libraries \u0026 Data Structures"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frocketlaunchr%2Fdataframe-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frocketlaunchr%2Fdataframe-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frocketlaunchr%2Fdataframe-go/lists"}