英文:
Skipping rows when using gota ReadCSV
问题
在gota中,你可以使用skip
参数来跳过指定的行数。下面是一个示例:
import (
"fmt"
"github.com/go-gota/gota/dataframe"
"os"
)
func main() {
// 打开文件
f, err := os.Open("data.tsv")
if err != nil {
fmt.Println("无法打开文件:", err)
return
}
defer f.Close()
// 读取数据框
df := dataframe.ReadCSV(f, dataframe.HasHeader(true), dataframe.Skip(3))
fmt.Println(df)
}
在上面的示例中,Skip(3)
表示跳过前3行。你可以根据需要修改数字来跳过不同的行数。
英文:
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?
答案1
得分: 2
你可以使用encoding/csv
包来首先操作行。
有两种方法:
- 使用
csv.Read()
来读取每一行。 - 切片记录。
以下是示例,请查看注释以了解第一种和第二种方法。
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) // 这将跳过csv中的行,第一种方法
if err != nil {
panic(err.Error())
}
records, err := csv.ReadAll() // 获取所有记录
if err != nil {
panic(err.Error())
}
// records = records[3:] // 第二种方法
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
函数的最后调用了LoadRecords
,就像我的示例一样。https://github.com/go-gota/gota/blob/f70540952827cfc8abfa1257391fd33284300b24/dataframe/dataframe.go#L1360
英文:
You can use encoding/csv
to manipulate rows first.
There are 2 methods.
- Using
csv.Read()
to read each rows. - 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
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论