Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 3, 2016 23:08:43

Beloved
Зарегистрирован: 2016-10-03
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

чтение файла csv в двумерную матрицу

Доброго времени суток!
Только начинаю работать с этим языком.
Встал в тупик при работе с файлом в формате *.csv
Имеется файл такого формата, нужно распарсить его в двумерный массив 9 столбцов 10 строк, чтобы дальше можно было работать с ним выбирая статистику.

Для открытия файла и считывания его построчно использовал следующий код:

 import csv
with open("z.csv", 'r', newline='') as f:
    reader = csv.reader(f, delimiter=';')
    d = f.readlines();
в результате:
F;18;A;at_home;teacher;no;1;1;3
F;17;T;at_home;other;yes;1;1;3
F;15;T;at_home;other;yes;2;3;3
F;15;T;health;services;yes;1;1;5
F;16;T;other;other;no;1;2;5
M;16;T;services;other;yes;1;2;5
M;16;T;other;other;yes;1;1;3
F;17;A;other;teacher;no;1;1;1
M;15;A;services;other;yes;1;1;1
M;15;T;other;other;yes;1;1;5


Хотелось бы видеть массив вида
M 15 A services other yes 1 1 1
M 15 T other other yes 1 1 5


Подскажите пожалуйста, что необходимо сделать дальше, чтобы можно было выбирать данные из файла и например построить графики (по оси x индекс по оси y второй столбец)

Прикреплённый файлы:
attachment z.csv (317 байт)

Офлайн

#2 Окт. 4, 2016 03:50:02

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

чтение файла csv в двумерную матрицу

В своем коде вы никак не используете csv, нужно так:

 with open("z.csv", 'r') as f:
    reader = csv.reader(f, delimiter=';')
    for row in reader:
        print row


А вообще, для подобных задач (загрузки и первичной обработки данных) очень хорошо подходит пакет pandas.

Офлайн

#3 Окт. 4, 2016 10:59:28

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

чтение файла csv в двумерную матрицу

scidam

scidam
В своем коде вы никак не используете csv,
Beloved
csv.reader(f, delimiter=';')
в следующий раз будьте внимательнее



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Окт. 4, 2016 11:42:49

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

чтение файла csv в двумерную матрицу

 from pandas import read_csv
dataset_RS = read_csv(path, ';', header=None)

PS. Пандас просто ТОРТ.

Отредактировано noob_saibot (Окт. 4, 2016 11:43:18)

Офлайн

#5 Окт. 5, 2016 02:56:57

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

чтение файла csv в двумерную матрицу

JOHN_16
в следующий раз будьте внимательнее

Да я видел ту строку (reader = csv.reader(f, delimiter=';')), но, видимо, не совсем удачно выразился… Просто созданный reader никак не использовался далее.

Офлайн

#6 Окт. 5, 2016 17:52:30

Beloved
Зарегистрирован: 2016-10-03
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

чтение файла csv в двумерную матрицу

noob_saibot
from pandas import read_csv
dataset_RS = read_csv(path, ‘;’, header=None)

PS. Пандас просто ТОРТ.
Отредактировано noob_saibot (вчера 11:43:18)
Спасибо большое, сделал так. Еще вопрос остался, можно ли получить доступ к данным в полученном DataFrame по типу Linq или как-то по другому делается?
Если например необходимо получить среднее число для атрибута 3 колонки при условии, что атрибут в первой колонке равен M, а во второй 16??

Офлайн

#7 Окт. 6, 2016 07:47:35

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

чтение файла csv в двумерную матрицу

Beloved
Третья колонка текстовая, вы хотите найти чаще всего повторяющееся значение?
А если среднее для числовой то так, например:
 print dataset_RS[(dataset_RS[0] == 'M') & (dataset_RS[1] == 16)][8].mean()

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version