Преобразование одного столбца в 2d-матрицу в python

#python-2.7 #dataframe

#python-2.7 #dataframe

Вопрос:

У меня есть данные, как показано ниже, в одном столбце, и я хочу разделить этот один столбец на n количество столбцов и назвать строки и столбцы. Как я могу это сделать в python?

————пример данных———-

 5
3
5
0
0
1
0
0
18
23
11
1
2
10
1
0
5
6
1
0
1
1
1
0
158
132
150
17
  

———— Вывод должен выглядеть следующим образом ———

      column0 column1 column2 column3 column4 column5 column6
row1    5      0      18      2       5       1       158
row2    3      1      23      10      6       1       132
row3    5      0      11      1       1       1       150
row4    0      0      1       0       0       0       17
  

Ответ №1:

Один из самых простых способов — использовать numpy и функцию reshape

 import numpy as np

k = np.array(data)
k.reshape([row,column],order='F')
  

Что касается вашего примера. Вы упомянули, что данные взяты из текстового файла, поэтому для получения данных из текстового файла и изменения формы

 import numpy as np

data = np.genfromtxt("sample-data.txt");
data.reshape([4,7],order='F')
  

вывод будет

 Out[27]: 
array([[  5,   0,  18,   2,   5,   1, 158],
       [  3,   1,  23,  10,   6,   1, 132],
       [  5,   0,  11,   1,   1,   1, 150],
       [  0,   0,   1,   0,   0,   0,  17]])
  

Я не знаю структуру данных, но предполагаю, что они находятся в 1 гигантском столбце, как показано в примере выше. При импорте данных с помощью open . Происходит следующее.

 data = open("sample-data.txt",'r').readlines()

data
Out[64]: 
['5n',
 '3n',
 '5n',
 '0n',
 '0n',
 '1n',
 '0n',
 '0n',
 '18n',
 '23n',
 '11n',
 '1n',
 '2n',
 '10n',
 '1n',
 '0n',
 '5n',
 '6n',
 '1n',
 '0n',
 '1n',
 '1n',
 '1n',
 '0n',
 '158n',
 '132n',
 '150n',
 '17']
  

В результате получается массив строковых значений, которые n означают следующую строку. Предполагая, что это числовые данные, вы захотите использовать приведенный выше код для получения чисел.

Комментарии:

1. Он возвращает ошибку значения «ValueError: не удается преобразовать массив размером 1 в форму (3,2)», и я также хочу назвать столбцы и строки как c1,c2…cn и r1, r2..rn

2. Как указано в ошибке, у вас есть массив, равный 1, и он не может преобразоваться в массив 3×2. Как вы вводите свои данные в python?

3. Я открываю те же данные из текстового файла ‘sample-data.txt ‘: import numpy as np data = open("sample-data.txt", 'r').readlines() k = np.array(data) k.reshape([4,6],order='F') print(k)

4. в образце набора данных 28 записей, поэтому вы не можете создать матрицу 4×6. импорт — это другое дело, ваши данные такие же, как в примере? Если это так, то чтение строк таким образом, как вы, превратит их в строки, что может вызвать проблему. Я снова обновлю свой пост.