После удаления первой строки заголовка numpy не может правильно разделять столбцы - PullRequest
0 голосов
/ 04 октября 2019

Без skip_header numpy правильно импортирует CSV-файл.

>>> data = np.genfromtxt('house_price.csv', delimiter=',', dtype=None, encoding=None)
>>> print(data.shape)
(13581, 21)
>>> data[:3]
array([['Suburb', 'Address', 'Rooms', 'Type', 'Price', 'Method',
        'SellerG', 'Date', 'Distance', 'Postcode', 'Bedroom2',
        'Bathroom', 'Car', 'Landsize', 'BuildingArea', 'YearBuilt',
        'CouncilArea', 'Lattitude', 'Longtitude', 'Regionname',
        'Propertycount'],
       ['Abbotsford', '85 Turner St', '2', 'h', '1480000.0', 'S',
        'Biggin', '3/12/2016', '2.5', '3067.0', '2.0', '1.0', '1.0',
        '202.0', '', '', 'Yarra', '-37.7996', '144.9984',
        'Northern Metropolitan', '4019.0'],
       ['Abbotsford', '25 Bloomburg St', '2', 'h', '1035000.0', 'S',
        'Biggin', '4/02/2016', '2.5', '3067.0', '2.0', '1.0', '0.0',
        '156.0', '79.0', '1900.0', 'Yarra', '-37.8079', '144.9934',
        'Northern Metropolitan', '4019.0']], dtype='<U27')

С помощью skip_header numpy не может разделять столбцы

>>> data = np.genfromtxt('house_price.csv', delimiter=',', dtype=None, skip_header=1,encoding=None)
>>> print(data.shape)
(13580,)

Чего мне не хватает? Можно ли получить форму (13581, 21) при использовании skip_header=1 или names=True

1 Ответ

0 голосов
/ 04 октября 2019

np.genfromtxt('house_price.csv', delimiter=',', dtype=None, encoding=None) дает вам обычный (2D) массив numpy, в котором все элементы имеют одинаковый тип d (в вашем случае '<U27').

С skip_header вы получаете структурированную (1D) массив, где каждая запись является записью из 21 элемента (полей):

data[:1]
#array([('Abbotsford', '68 Studley St', 2, 'h', -1, 'SS', 'Jellis', '3/09/2016', 2.5, 3067, 2, 1, 1, 126, nan, -1, 'Yarra City Council', -37.8014, 144.9958, 'Northern Metropolitan', 4019)],
#      dtype=[('f0', '<U18'), ('f1', '<U27'), ('f2', '<i4'), ('f3', '<U1'), ('f4', '<i4'), ('f5', '<U2'), ('f6', '<U27'), ('f7', '<U10'), ('f8', '<f8'), ('f9', '<i4'), ('f10', '<i4'), ('f11', '<i4'), ('f12', '<i4'), ('f13', '<i4'), ('f14', '<f8'), ('f15', '<i4'), ('f16', '<U30'), ('f17', '<f8'), ('f18', '<f8'), ('f19', '<U26'), ('f20', '<i4')])

Здесь каждый «столбец» (так сказать) имеет свой собственный тип dtype. Итак, numpy проделал большую работу по разделению столбцов, вы просто не видите его, глядя на вывод shape.

С names=True (без пропуска заголовка) вы получите тот же результат (структурированный массив), но с правильными именами полей вместо 'f0' ... 'f20'.


Возможно, вы захотите взглянуть на панд . Вы можете создать фрейм данных с помощью
import pandas as pd
df = pd.read_csv('house_price.csv')

. Это даст вам фрейм данных из 13581 строк и 21 столбца, каждый из которых имеет свой собственный тип данных. Если вам нужны данные в виде массива NumPy, вы можете получить их из кадра данных с помощью df.to_numpy():

df.to_numpy()[:2]
#array([['Abbotsford', '68 Studley St', 2, 'h', nan, 'SS', 'Jellis',
#        '3/09/2016', 2.5, 3067.0, 2.0, 1.0, 1.0, 126.0, nan, nan,
#        'Yarra City Council', -37.8014, 144.9958,
#        'Northern Metropolitan', 4019.0],
#       ['Abbotsford', '85 Turner St', 2, 'h', 1480000.0, 'S', 'Biggin',
#        '3/12/2016', 2.5, 3067.0, 2.0, 1.0, 1.0, 202.0, nan, nan,
#        'Yarra City Council', -37.7996, 144.9984,
#        'Northern Metropolitan', 4019.0]], dtype=object)

или использовать df.to_records() для получения структурированного массива NUMPY.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...