np.loadtxt против np.genfromtxt - PullRequest
0 голосов
/ 28 июня 2018

когда я использую следующий код np.loadtxt для загрузки данных в формате:

2017-07-26,153.3500,153.9300,153.0600,153.5000,153.5000,12778195.00

данные загружаются просто отлично, код loadtxt ->

a, b, c, d, e, f, g = np.loadtxt("goog.csv",
                                  dtype={'names': ("b'Date", 'Open', 'High', 'Low', 'Close', 'Adjusted_close', 'Volume'),
                                        'formats': ('U10', np.float, np.float, np.float, np.float, np.float, np.float)},                               
                                  delimiter=',',
                                  skiprows=1,
                                  unpack=True)
print(a)

Выход ->

['2017-07-26' '2017-07-25' '2017-07-24' ..., '2000-01-05' '2000-01-04'
'2000-01-03']

Process finished with exit code 0

НО при использовании соответствующего кода np.genfromtxt выдает ErrorError: слишком много значений для распаковки, я использовал следующий код genfromtxt ->

a, b, c, d, e, f, g = np.genfromtxt('goog.csv',  
                                    dtype={'names': ("b'Date", 'Open', 'High', 'Low', 'Close', 'Adjusted_close', 'Volume'),
                                           'formats': ('U10', np.float, np.float, np.float, np.float, np.float, np.float)},
                                    delimiter=',',
                                    skip_header=1,
                                    unpack=True)
print(a)

Выход ->

Traceback (most recent call last):
File "C:/Users/sonika jha/PycharmProjects/csvCheck/csvCheck.py", line 84, in <module>
download_stock_data()
File "C:/Users/sonika jha/PycharmProjects/csvCheck/csvCheck.py", line 66, in download_stock_data
unpack=True)
ValueError: too many values to unpack (expected 7)

Process finished with exit code 1

Моя конечная цель состояла в том, чтобы загрузить дату в строковом типе данных, а остальные в float, используя genfromtxt.

1 Ответ

0 голосов
/ 28 июня 2018

loadtxt и genfromtxt обрабатывают распаковку из структурированных данных по-разному

loadtxt документы:

распаковка: bool, опционально

Если True, возвращаемый массив транспонируется, так что аргументы могут быть распаковывается с использованием x, y, z = loadtxt(...). При использовании со структурированным data-type, массивы возвращаются для каждого поля. По умолчанию установлено значение False.

genfromtxt документы:

распаковка: bool, опционально

Если True, возвращаемый массив транспонируется, так что аргументы могут быть распаковано с использованием x, y, z = loadtxt(...)

loadtxt в этой последней цитате является опечаткой.

Если я повторю вашу пробную строку 3 раза и запусту genfromtxtunpack=False):

Я получаю (3,) массив с определенным dtype:

In [327]: data
Out[327]: 
array([('2017-07-26', 153.35, 153.93, 153.06, 153.5, 153.5, 12778195.),
       ('2017-07-26', 153.35, 153.93, 153.06, 153.5, 153.5, 12778195.),
       ('2017-07-26', 153.35, 153.93, 153.06, 153.5, 153.5, 12778195.)],
      dtype=[('bDate', '<U10'), ('Open', '<f8'), ('High', '<f8'), ('Low', '<f8'), ('Close', '<f8'), ('Adjusted_close', '<f8'), ('Volume', '<f8')])

loadtxt производит то же самое

Но loadtxt с unpack в итоге делает

a = data['bDate`]
b = data['Open']
etc.

то есть, присваивая одно поле каждой из переменных.

Но genfromtxt делает

a = data[0]
b = data[1]
etc

То есть по одной строке или элементу массива 1d для каждой переменной. С большим количеством элементов, чем ваши 7 переменных, он жалуется на слишком много значений для распаковки.

Так что либо придерживайтесь loadtxt, либо не используйте unpack с genfromtxt.

Я думаю, что загрузка структурированного массива без unpack дает вам больше возможностей при дальнейшей обработке.

...