Как устранить неполадки ValueError: массив имеет длину% s, а длина DataFrame -% s? - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь следовать примеру на этом ноутбуке .

Как предлагается в этой теме github :

  1. I поднял ulimit до 9999.
  2. Я уже конвертировал CSV-файлы в hdf5

Мой код завершается ошибкой при попытке открыть один файл hdf5 в фрейме данных:

df = vaex.open('data/chat_history_00.hdf5')

Вот остаток кода:

import re
import glob
import vaex
import numpy as np

def tryint(s):
    try:
        return int(s)
    except:
        return s

def alphanum_key(s):
    """ Turn a string into a list of string and number chunks.
        "z23a" -> ["z", 23, "a"]
    """
    return [ tryint(c) for c in re.split('([0-9]+)', s) ]

hdf5_list = glob.glob('data/*.hdf5')
hdf5_list.sort(key=alphanum_key)
hdf5_list = np.array(hdf5_list)

assert len(hdf5_list) == 11, "Incorrect number of files"

# Check how the single file looks like:
df = vaex.open('data/chat_history_10.hdf5')
df

Произошла ошибка:

ОШИБКА: MainThread: vaex: ошибка открытия 'data / chat_history_00.hdf5' -------------------------------------------------- ------------------------- ValueError Traceback (последний вызов был последним) в 1 # Проверьте, как выглядит один файл: ----> 2 df = vaex.open ('data / chat_history_10.hdf5') 3 df

/ usr / local / anaconda3 / lib / python3 .7 / site-packages / vaex / init .py in open (путь, конвертировать, перемешать, copy_index, * args, ** kwargs) 207 ds = from_csv (path, copy_index = copy_index, ** kwargs) 208 else: -> 209 ds = vaex.file.open ( путь, * args, ** kwargs) 210, если преобразовать и ds: 211 ds.export_hdf5 (имя_файла_hdf5, shuffle = shuffle)

/ usr / local / anaconda3 / lib / python3 .7 / site-packages / vaex / file / init . py в открытом (path, * args, ** kwargs) 39 break 40, если dataset_class: ---> 41 набор данных = набор данных_class (path, * args, ** kwargs) 42 возвращаемый набор данных 43

/ usr / local / anaconda3 / lib / python3 .7 / site-packages / vaex / hdf5 / dataset.py в init (self, filename, write) 84 self.h5table_root_name = нет 85 self._version = 1 ---> 86 self._load () 87 88 def write_meta (self):

/ usr / local / anaconda3 / lib / python3 .7 / site-packages / vaex / hdf5 / dataset.py in _load (self) 182 def _load (self): 183 если «data» в self.h5file: -> 184 self._load_columns (self.h5file ["/ data"]) 185 self.h5table_root_name = "/ data" 186 if "таблица" в файле self.h5:

/ usr / local / anaconda3 / lib / python3 .7 / site-packages / vaex / hdf5 / dataset.py в _load_columns (self, h5data, сначала) 348 self.add_column (имя столбца, self._map_hdf5_array (данные, столбец ['mask'])) 349 else: -> 350 self.add_col umn (имя-столбца, self._map_hdf5_array (data)) 351 else: 352 transposed = shape 1

/ usr / local / anaconda3 / lib / python3 .7 /site-packages/vaex/dataframe.py в add_column (self, name, f_or_array, dtype) 2929
если len (self) == len (ar): 2930 повысить ValueError ("массив имеет длину% s, в то время как длина DataFrame равна% s из-за фильтрации, длина (нефильтрованная) равна% s. "% (len (ar), len (self), self.length_unfiltered ())) -> 2931 поднять массив ValueError (" имеет длину% s, тогда как длина DataFrame равна% s "% (len (ar), self.length_original ())) 2932 # assert self.length_unfiltered () == len (data)," столбцы должны иметь равной длины, длина должна быть% d, а% d "% (self.length_unfiltered (), len (data)) 2933 valid_name = vaex.utils.find_valid_name (name)

ValueError: массив имеет длина 2578961, тогда как длина DataFrame равна 6

Что это значит и как мне устранить ее? Все файлы имеют 6 столбцов.

РЕДАКТИРОВАТЬ: Вот как я создал файл hdf5:

pd.read_csv(r'G:/path/to/file/data/chat_history-00.csv').to_hdf(r'data/chat_history_00.hdf5', key='data')

1 Ответ

1 голос
/ 27 января 2020

На вопрос ответил Йован из vaex на Github :

Не следует использовать pandas. to_hdf, если вы хотите прочитать данные с помощью vaex с отображением в памяти. Пожалуйста, см. Эту ссылку для получения более подробной информации.

Я использовал это вместо:

vdf = vaex.from_pandas(df, copy_index=False)
vdf.export_hdf5('chat_history_00.hdf5')
...