Формирование массива из данных

283 просмотра
0
0 Комментариев

Данные выглядят так:

Gustman;82;95;40
Mercer;27;99;37
Gill;70;63;42
Hawkins;24;98;58
Hodges;39;63;99
Winter;94;68;82
Gerald;84;72;87
Bawerman;89;72;61

Нужно привести их к виду: [[‘Gustman’,’82’,’95’,’40’],[‘Mercer’,’27’,’99’,’37’]…]

import re
with open('data.txt') as inf:
    data=[j for j in inf.read().split('\n')]
data

Вот мой код, как его доработать и где более подробно об этом прочитать?


Добавить комментарий

2 Answers

Python Опубликовано 12.12.2018
0

Как уже сказал @ivan_susanin лучше воспользоваться модулем CSV:

import csv
 
with open(r'C:\Temp\.data\621286.csv') as f:
     data = [row for row in csv.reader(f, delimiter=';')]
 
print(data)

Результат:

[['Gustman', '82', '95', '40'], ['Mercer', '27', '99', '37'], ['Gill', '70', '63', '42'], ['Hawkins', '24', '98', '58'], ['Hodges', '39', '63', '99'],
 ['Winter', '94', '68', '82'], ['Gerald', '84', '72', '87'], ['Bawerman', '89', '72', '61']]

Если вы хотите дальше обрабатывать и/или анализировать эти данные, то очень советую обратить внимание на модуль Pandas (Panel Data):

Пример:

import pandas as pd
 
df = pd.read_csv(fn, sep=';', header=None, names=['name','c1','c2','c3'])

DataFrame:

In [37]: df
Out[37]:
       name  c1  c2  c3
0   Gustman  82  95  40
1    Mercer  27  99  37
2      Gill  70  63  42
3   Hawkins  24  98  58
4    Hodges  39  63  99
5    Winter  94  68  82
6    Gerald  84  72  87
7  Bawerman  89  72  61

Среднее значение всех числовых столбцов:

In [38]: df.mean()
Out[38]:
c1    63.625
c2    78.750
c3    63.250
dtype: float64

А это структура, которая необходима вам:

In [39]: df.astype(str).values.tolist()
Out[39]:
[['Gustman', '82', '95', '40'],
 ['Mercer', '27', '99', '37'],
 ['Gill', '70', '63', '42'],
 ['Hawkins', '24', '98', '58'],
 ['Hodges', '39', '63', '99'],
 ['Winter', '94', '68', '82'],
 ['Gerald', '84', '72', '87'],
 ['Bawerman', '89', '72', '61']]

Добавить комментарий
0

То что касается вашего кода, то решение добавить ещё один split(), только по символу «;». Получиться так:

with open('data.csv') as inf:
   data=[j.split(';') for j in inf.read().split('\n')]
print(data)

результат

[['Gustman', '82', '95', '40'], ['Mercer', '27', '99', '37'], ['Gill', '70', '63', '42'],... ]

Тут есть маленький нюанс. У вас в примере вывода в первом списке отсутствует значение ’40’, но во втором списке присутствует ’37’. Там некая закономерность или просто очипятка?

Ну а в целом, Вы явно работаете с csv файлом, так что возможно пригодятся раздел документации про работу CSV файлам

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up