Интересно , если есть прямой путь , чтобы импортировать содержимое файла CSV в массив записей, сколько в том , как R - х read.table()
, read.delim()
иread.csv()
импорт семейных данных в кадр данных АиРа?
Или это лучший способ использовать csv.reader (), а затем применить что-то вроде numpy.core.records.fromrecords()
?
python
numpy
scipy
genfromtxt
hatmatrix
источник
источник
Ответы:
Вы можете использовать
genfromtxt()
метод Numpy для этого, установивdelimiter
kwarg в запятую.Более подробную информацию о функции можно найти в соответствующей документации .
источник
nan
значения, почему? Также с loadtxt я получаюUnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 155: ordinal not in range(128)
. У меня есть умлауты, такие как ä и ö во входных данных.encoding="utf8"
аргумент. Python - одна из немногих современных программных частей, которая часто вызывает проблемы кодирования текста, которые ощущаются как вещи из прошлого.Я бы порекомендовал
read_csv
функцию изpandas
библиотеки:Это дает pandas DataFrame - позволяющий много полезных функций манипулирования данными, которые не доступны напрямую с массивами записей .
Я также рекомендовал бы
genfromtxt
. Однако, поскольку вопрос требует массив записей , в отличие от обычного массива,dtype=None
параметр должен быть добавлен кgenfromtxt
вызову:Учитывая входной файл
myfile.csv
,:дает массив:
а также
дает массив записей:
Это имеет то преимущество, что файл с несколькими типами данных (включая строки) может быть легко импортирован .
источник
(1000, 1)
.np.genfromtxt
не делает этого: например(1000,)
.Я рассчитал
против
на 4,6 миллиона строк с примерно 70 столбцами и обнаружили, что путь NumPy занял 2 минуты 16 секунд, а метод понимания csv-list - 13 секунд.
Я бы порекомендовал метод понимания csv-list, так как он, скорее всего, опирается на скомпилированные библиотеки, а не на интерпретатор, а на NumPy. Я подозреваю, что у метода панд были бы похожие интерпретаторы.
источник
Вы также можете попытаться
recfromcsv()
угадать типы данных и вернуть правильно отформатированный массив записей.источник
numpy.recfromcsv(fname, delimiter=',', filling_values=numpy.nan, case_sensitive=True, deletechars='', replace_space=' ')
Ключевыми аргументами являются последние три.Поскольку я пробовал оба способа, используя NumPy и Pandas, использование pandas имеет много преимуществ:
Это мой тестовый код:
test_numpy_csv.py
test_pandas.py
Файл данных:
С NumPy и пандами в версиях:
источник
Вы можете использовать этот код для отправки данных файла CSV в массив:
источник
С помощью
numpy.loadtxt
Довольно простой метод. Но это требует, чтобы все элементы были плавающими (int и т. Д.)
источник
Это самый простой способ:
import csv with open('testfile.csv', newline='') as csvfile: data = list(csv.reader(csvfile))
Теперь каждая запись в данных является записью, представленной в виде массива. Итак, у вас есть 2D-массив. Это сэкономило мне так много времени.
источник
Я попробовал это:
источник
Я бы предложил использовать таблицы (
pip3 install tables
). Вы можете сохранить свой.csv
файл с.h5
помощью pandas (pip3 install pandas
),Затем вы можете легко и с меньшими затратами времени даже для огромного объема данных загрузить свои данные в массив NumPy .
источник
Эта работа как шарм ...
источник