使用 gota ReadCSV 时跳过行

发布于 2025-01-10 23:05:40 字数 238 浏览 0 评论 0原文

我来自 pandas,它有一个方便的 skiprows 参数,如下所示:

df = pd.read_csv(tsv_file, sep="\t", encoding=encoding, skiprows=3, thousands=",")

How can I do this with gota?

I'm coming from pandas which has a convenient skiprows parameter like this:

df = pd.read_csv(tsv_file, sep="\t", encoding=encoding, skiprows=3, thousands=",")

How can I do this with gota?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

℉絮湮 2025-01-17 23:05:40

您可以先使用 encoding/csv 来操作行。

有2种方法。

  1. 使用 csv.Read() 读取每一行。
  2. 对记录进行切片。

这是示例,请参阅评论了解第一种和第二种方法。

package main

import (
    "encoding/csv"
    "fmt"
    "os"

    "github.com/go-gota/gota/dataframe"
)

func main() {
    f, err := os.Open("sample.csv")
    if err != nil {
        panic(err.Error())
    }
    defer f.Close()

    csv := csv.NewReader(f)

    err = SkipRows(csv, 3) // this will skip rows in csv FIRST METHOD
    if err != nil {
        panic(err.Error())
    }

    records, err := csv.ReadAll() // get all records
    if err != nil {
        panic(err.Error())
    }

    // records = records[3:] // SECOND METHOD
    df := dataframe.LoadRecords(records)

    fmt.Println(df.Records())
    fmt.Println(df.Names())
}

func SkipRows(csv *csv.Reader, skip int) (err error) {
    for i := 0; i < skip; i++ {
        _, err = csv.Read()
        if err != nil {
            return
        }
    }
    return
}

Sample.csv

1,1,1
2,2,2
3,3,3
header1,header2,header3
5,5,5
6,6,6
7,7,7
8,8,8
9,9,9
10,10,10
11,11,11
12,12,12
13,13,13
14,14,14
15,15,15
16,16,16
17,17,17
18,18,18
19,19,19
20,20,20
21,21,21

输出

[[header1 header2 header3] [5 5 5] [6 6 6] [7 7 7] [8 8 8] [9 9 9] [10 10 10] [11 11 11] [12 12 12] [13 13 13] [14 14 14] [15 15 15] [16 16 16] [17 17 17] [18 18 18] [19 19 19] [20 20 20] [21 21 21]]
[header1 header2 header3]

ReadCSV 函数末尾,像我的示例一样调用 LoadRecordshttps://github.com/go-gota/gota/blob/f70540952827cfc8abfa1257391fd33284300b24/dataframe/dataframe.go#L1360

You can use encoding/csv to manipulate rows first.

There are 2 methods.

  1. Using csv.Read() to read each rows.
  2. Slice the records.

This is the example, please see comments to see first and second method.

package main

import (
    "encoding/csv"
    "fmt"
    "os"

    "github.com/go-gota/gota/dataframe"
)

func main() {
    f, err := os.Open("sample.csv")
    if err != nil {
        panic(err.Error())
    }
    defer f.Close()

    csv := csv.NewReader(f)

    err = SkipRows(csv, 3) // this will skip rows in csv FIRST METHOD
    if err != nil {
        panic(err.Error())
    }

    records, err := csv.ReadAll() // get all records
    if err != nil {
        panic(err.Error())
    }

    // records = records[3:] // SECOND METHOD
    df := dataframe.LoadRecords(records)

    fmt.Println(df.Records())
    fmt.Println(df.Names())
}

func SkipRows(csv *csv.Reader, skip int) (err error) {
    for i := 0; i < skip; i++ {
        _, err = csv.Read()
        if err != nil {
            return
        }
    }
    return
}

sample.csv

1,1,1
2,2,2
3,3,3
header1,header2,header3
5,5,5
6,6,6
7,7,7
8,8,8
9,9,9
10,10,10
11,11,11
12,12,12
13,13,13
14,14,14
15,15,15
16,16,16
17,17,17
18,18,18
19,19,19
20,20,20
21,21,21

output

[[header1 header2 header3] [5 5 5] [6 6 6] [7 7 7] [8 8 8] [9 9 9] [10 10 10] [11 11 11] [12 12 12] [13 13 13] [14 14 14] [15 15 15] [16 16 16] [17 17 17] [18 18 18] [19 19 19] [20 20 20] [21 21 21]]
[header1 header2 header3]

In the end of ReadCSV function is calling LoadRecords like my example. https://github.com/go-gota/gota/blob/f70540952827cfc8abfa1257391fd33284300b24/dataframe/dataframe.go#L1360

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文