CSVファイルからPythonに2行目を読み取ります

Hardiansyah Shidek

私はcsvファイルを持っています:

Index,X1,X2,X3,X4,X5,Y
1,-1.608052,-0.377992,1.204209,1.313808,1.218265,1
2,0.393766,0.630685,-1.222062,0.090558,0.015893,0
3,-0.466243,0.276972,2.519047,0.673745,0.16729,1
4,1.47121,-0.046791,-0.303291,-0.365437,1.989287,0
5,-1.672906,1.25588,-0.355706,0.123143,-2.241941,1

分類システムプログラムを作成したいのですが、データは2行目にあります。2行目からデータを取得しようとしています。私は次のようにnext(list)で試しました:

def load_DataTrain(filename):
    try:
        with open(filename, newline='') as iFile:
            return list(reader(iFile, delimiter=','))
            next(list)
    except FileNotFoundError as e:
        raise e

しかし、それは機能せず、プログラムが最初の行から読み取ったため、エラーが発生します。csvを読み取るためにpandasまたはcsv.readerを使用しませんでした。これは、DivyeshGitHubから取得したコードです。

from csv import reader
from sys import exit
from math import sqrt
from operator import itemgetter

def load_DataTrain(filename):
    try:
        with open(filename) as iFile:
            return list(reader(iFile, delimiter=','))
            next(list)
    except FileNotFoundError as e:
        raise e

def convert_to_float(DataTrain, mode):
    new_set = []
    try:
        if mode == 'training':
            for data in DataTrain:
                new_set.append([float(x) for x in data[:len(data)-1]] + [data[len(data)-1]])

        elif mode == 'test':
            for data in DataTrain:
                new_set.append([float(x) for x in data])

        else:
            print('Invalid mode, program will exit.')
            exit()

        return new_set

    except ValueError as v:
        print(v)
        print('Invalid data set format, program will exit.')
        exit()


def get_classes(training_set):
    return list(set([c[-1] for c in training_set]))


def find_neighbors(distances, k):
    return distances[0:k]


def find_response(neighbors, classes):
    votes = [0] * len(classes)

    for instance in neighbors:
        for ctr, c in enumerate(classes):
            if instance[-2] == c:
                votes[ctr] += 1

    return max(enumerate(votes), key=itemgetter(1))


def knn(training_set, test_set, k):
    distances = []
    dist = 0
    limit = len(training_set[0]) - 1

    # generate response classes from training data
    classes = get_classes(training_set)

    try:
        for test_instance in test_set:
            for row in training_set:
                for x, y in zip(row[:limit], test_instance):
                    dist += (x-y) * (x-y)
                distances.append(row + [sqrt(dist)])
                dist = 0

            distances.sort(key=itemgetter(len(distances[0])-1))

            # find k nearest neighbors
            neighbors = find_neighbors(distances, k)

            # get the class with maximum votes
            index, value = find_response(neighbors, classes)

            # Display prediction
            print('The predicted class for sample ' + str(test_instance) + ' is : ' + classes[index])
            print('Number of votes : ' + str(value) + ' out of ' + str(k))

            # empty the distance list
            distances.clear()

    except Exception as e:
        print(e)


def main():
    try:
        # get value of k
        k = int(input('Enter the value of k : '))

        # load the training and test data set
        training_file = input('Enter name of training data file : ')
        test_file = input('Enter name of test data file : ')
        training_set = convert_to_float(load_DataTrain(training_file), 'training')
        test_set = convert_to_float(load_DataTrain(test_file), 'test')

        if not training_set:
            print('Empty training set')

        elif not test_set:
            print('Empty test set')

        elif k > len(training_set):
            print('Expected number of neighbors is higher than number of training data instances')

        else:
            knn(training_set, test_set, k)

    except ValueError as v:
        print(v)

    except FileNotFoundError:
        print('File not found')


if __name__ == '__main__':
    main()

そして結果は次のとおりです。

could not convert string to float: 'Index'

csvファイルの2行目から読み取るにはどうすればよいですか?

ハートCde

関数のマイナーな変更。

あなただけ返すようにしたい場合は2nd、行を、あなたは置き換えることができます[1:][1]以下のコードで。

from csv import reader
def load_DataTrain(filename):
    try:
        with open(filename, newline='') as iris:
            # returning from 2nd row
            return list(reader(iris, delimiter=','))[1:]
    except FileNotFoundError as e:
        raise e
load_DataTrain("file.csv")

出力:

[['1', '-1.608052', '-0.377992', '1.204209', '1.313808', '1.218265', '1'],
 ['2', '0.393766', '0.630685', '-1.222062', '0.090558', '0.015893', '0'],
 ['3', '-0.466243', '0.276972', '2.519047', '0.673745', '0.16729', '1'],
 ['4', '1.47121', '-0.046791', '-0.303291', '-0.365437', '1.989287', '0'],
 ['5', '-1.672906', '1.25588', '-0.355706', '0.123143', '-2.241941', '1']]

別の方法 pandas

のみを返す場合はで変更df.values.tolist()ます。df.iloc[0].values.tolist()2nd

import pandas as pd
df = pd.read_csv("dummy.csv")
pprint(df.values.tolist())

出力:

[[1.0, -1.608052, -0.377992, 1.204209, 1.313808, 1.218265, 1.0],
 [2.0, 0.393766, 0.630685, -1.222062, 0.090558, 0.015893, 0.0],
 [3.0,
  -0.466243,
  0.276972,
  2.519047,
  0.6737449999999999,
  0.16729000000000002,
  1.0],
 [4.0,
  1.4712100000000001,
  -0.046791,
  -0.303291,
  -0.365437,
  1.9892869999999998,
  0.0],
 [5.0,
  -1.6729060000000002,
  1.2558799999999999,
  -0.355706,
  0.123143,
  -2.241941,
  1.0]]

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Pythonの2行目からファイルを読み取ります

分類Dev

Python2.7 csvファイルを読み取り、次の行から読み取ります

分類Dev

Java-2行目からテキストファイルを読み取ります

分類Dev

C配列のtxtファイルの2行目から数値を読み取ります

分類Dev

Python列のcsvファイルを読み取りますか?

分類Dev

StreamReaderは、4行のテキストファイルから2行目と4行目のみを読み取ります

分類Dev

Pythonはgzip圧縮されたファイルからcsv行を読み取ります

分類Dev

2行目からファイルを読み取るか、ヘッダー行をスキップします

分類Dev

ファイルからBash配列に行を読み取ります

分類Dev

PythonはWebURLからファイルを読み取ります

分類Dev

csvファイルの2行目をdictに読み込みます

分類Dev

Pythonはcsvファイルを読み取り、そこからスペースを取り除きます

分類Dev

Pythonはどのようにファイルから行を読み取りますか

分類Dev

Pythonはどのようにファイルから行を読み取りますか

分類Dev

PythonでCSVファイルから行を読み取る

分類Dev

PythonでCSVファイルから行を読み取る

分類Dev

Python-一度にファイルから1000行を読み取ります

分類Dev

Pythonは正規表現によってファイルから行を読み取ります

分類Dev

pythonフォルダー内のcsvファイルから各n行目を読み取って追加します

分類Dev

csvファイルから2番目の(循環)ヒストグラム読み取りを追加するにはどうすればよいですか?

分類Dev

intをファイルから配列に再帰的に読み取ります。最後から2番目の要素は常に間違っています

分類Dev

csvファイルから読み取りを並列化できますか?

分類Dev

ファイルから行列から行と列を読み取ります

分類Dev

2つの異なるファイルから読み取り、3番目のファイルに印刷する

分類Dev

ApacheJmeterはcsvファイルからSQL変数を読み取ります

分類Dev

csvファイルから任意の列を読み取ります

分類Dev

ファイルから文字列を読み取り、2番目のファイルの各行と比較する方法

分類Dev

1行目、2行目、3行目ごとにtxtファイルを読み取り、3つの異なるリストに保存します

分類Dev

PHP配列-CSVファイルから読み取り、最初の列のキー、2番目の列の値を作成します

Related 関連記事

  1. 1

    Pythonの2行目からファイルを読み取ります

  2. 2

    Python2.7 csvファイルを読み取り、次の行から読み取ります

  3. 3

    Java-2行目からテキストファイルを読み取ります

  4. 4

    C配列のtxtファイルの2行目から数値を読み取ります

  5. 5

    Python列のcsvファイルを読み取りますか?

  6. 6

    StreamReaderは、4行のテキストファイルから2行目と4行目のみを読み取ります

  7. 7

    Pythonはgzip圧縮されたファイルからcsv行を読み取ります

  8. 8

    2行目からファイルを読み取るか、ヘッダー行をスキップします

  9. 9

    ファイルからBash配列に行を読み取ります

  10. 10

    PythonはWebURLからファイルを読み取ります

  11. 11

    csvファイルの2行目をdictに読み込みます

  12. 12

    Pythonはcsvファイルを読み取り、そこからスペースを取り除きます

  13. 13

    Pythonはどのようにファイルから行を読み取りますか

  14. 14

    Pythonはどのようにファイルから行を読み取りますか

  15. 15

    PythonでCSVファイルから行を読み取る

  16. 16

    PythonでCSVファイルから行を読み取る

  17. 17

    Python-一度にファイルから1000行を読み取ります

  18. 18

    Pythonは正規表現によってファイルから行を読み取ります

  19. 19

    pythonフォルダー内のcsvファイルから各n行目を読み取って追加します

  20. 20

    csvファイルから2番目の(循環)ヒストグラム読み取りを追加するにはどうすればよいですか?

  21. 21

    intをファイルから配列に再帰的に読み取ります。最後から2番目の要素は常に間違っています

  22. 22

    csvファイルから読み取りを並列化できますか?

  23. 23

    ファイルから行列から行と列を読み取ります

  24. 24

    2つの異なるファイルから読み取り、3番目のファイルに印刷する

  25. 25

    ApacheJmeterはcsvファイルからSQL変数を読み取ります

  26. 26

    csvファイルから任意の列を読み取ります

  27. 27

    ファイルから文字列を読み取り、2番目のファイルの各行と比較する方法

  28. 28

    1行目、2行目、3行目ごとにtxtファイルを読み取り、3つの異なるリストに保存します

  29. 29

    PHP配列-CSVファイルから読み取り、最初の列のキー、2番目の列の値を作成します

ホットタグ

アーカイブ