Есть несколько вопросов здесь.
Во-первых, read_csv
использует запятую как разделитель по умолчанию, поэтому вам не нужно указывать это.
Во-вторых, читатель pandas csv
по умолчанию использует первую строку для получения заголовков столбцов. Это не похоже на то, что вы хотите, поэтому вам нужно использовать аргумент header=None
.
В-третьих, похоже, что ваш первый столбец - это номер строки. Вы можете использовать index_col=0
, чтобы использовать этот столбец в качестве индекса.
В-четвертых, для панд первым индексом является столбец, а не строка. Кроме того, с использованием стандартного нотации data[ind]
индексируется по имени столбца, а не номер столбца. И вы не можете использовать запятую для индексации как строки, так и столбца одновременно (для этого вам нужно использовать data.loc[row, col]
).
Итак, для вашего случая все, что вам нужно сделать, чтобы получить второй столбец, - data[2]
, или если вы используете первый столбец в качестве номера строки, тогда второй столбец станет первым столбцом, поэтому вы сделаете . Это возвращает pandas Series
, что соответствует 1D
эквиваленту 2D
DataFrame
.
Так что все это должно выглядеть следующим образом:
import pandas as pd
data = pd.read_csv('test.csv', header=None, index_col=0)
week = data[1]
data
выглядит следующим образом:
1 2 3 4
0
1 10 2 100 12
2 15 5 150 15
3 25 7 240 20
4 22 12 350 20
5 51 13 552 20
6 134 20 880 36
7 150 22 900 38
8 200 29 1020 44
9 212 31 1100 46
10 199 23 1089 45
11 220 32 1145 60
'0' строка не существует, это только там для информационных целей.
week
выглядит следующим образом:
0
1 10
2 15
3 25
4 22
5 51
6 134
7 150
8 200
9 212
10 199
11 220
Name: 1, dtype: int64
Однако, вы можете дать столбцы (и строки) значимые имена в панд, а затем получить доступ к ним с помощью этих имен.Я не знаю, имена столбцов, так что я просто сделал некоторые до:
import pandas as pd
data = pd.read_csv('test.csv', header=None, index_col=0, names=['week', 'spam', 'eggs', 'grail'])
week = data['week']
В этом случае data
выглядит следующим образом:
week spam eggs grail
1 10 2 100 12
2 15 5 150 15
3 25 7 240 20
4 33 12 350 20
5 51 13 552 20
6 134 20 880 36
7 150 22 900 38
8 200 29 1020 44
9 212 31 1100 46
10 199 23 1089 45
11 220 32 1145 50
И week
выглядит следующим образом:
1 10
2 15
3 25
4 33
5 51
6 134
7 150
8 200
9 212
10 199
11 220
Name: week, dtype: int64
Для np.newaxis
то, что делает, добавляет одно измерение в массив. Так скажите, что у вас есть массив 1D
(вектор), используя np.newaxis
на нем, превратив его в массив 2D
. Он превратил бы массив 2D
в массив 3D
, 3D
в 4D
и так далее. В зависимости от того, где вы положили его (например, [:,np.newaxis]
vs. [np.newaxis,:]
, вы можете определить, какой размер для добавления. Так np.arange(10)[np.newaxis,:]
(или просто np.arange(10)[np.newaxis]
) дает форму (1,10)
2D
массив, в то время как np.arange(10)[:,np.newaxis]
дает форму (10,1)
2D
массив.
В вашем случае, что линия делает, получается столбец с именем 1
, который является 1D
pandas Series
, а затем добавляет к нему новое измерение. Однако вместо того, чтобы превращать его обратно в DataFrame
, он вместо этого преобразует его в a numpy array, затем добавляет одно измерение, чтобы сделать его массив numbox 2D
.
Это, впрочем, опасно долговременно. Нет никакой гарантии, что такое молчаливое преобразование в какой-то момент не будет изменено. Чтобы изменить объекты pandas на numpy, вы должны использовать явное преобразование с помощью метода values
, поэтому в ваших случаях data.values
или data['1'].values
.
Однако вам не нужен массив numpy. A series
в порядке. Если вы действительно хотите объект 2D
, вы можете конвертировать Series
в DataFrame
, используя что-то вроде data['1'].to_frame()
.
re: 'np.newaxis': напечатать атрибут' .shape' 'data ['1']' и 'data ['1'] [:, np.newaxis]' –
Вот. CSV-файл : http://www.filedropper.com/test_82 – Twi