#python #pandas #csv #numpy
#python #pandas #csv #numpy
Вопрос:
Я читаю файл csv и хочу импортировать последние 3 столбца в виде массива.
Данные выглядят примерно так:
01/01/2020, 100.5, Apple, 0.1, 0.2, 0.3
02/01/2020, 373.0, Banana, 7.5, 6.6, 2.1
03/01/2020, 552.9, Orange, 8.0, 1.2, 7.5
....
Ранее я справлялся с этим с помощью Numpy, используя genfromtxt, определяя dtype данных:
mydtype = np.dtype([('Date', 'a10'),('Val', 'f8'),('Fruit', 'a10'),('ValArray', '3f8')
затем вызов numpy genfromtxt с использованием этого dtype:
Data = np.genfromtxt('My input file', dtype=mydtype, delimiter=',', autostrip=True)
Это дало мне Numpy структурированный массив с полями ‘Date’, ‘Val’, ‘Fruit’ и ‘ValArray’, где ‘ValArray’ — это массив массивов.
Теперь я хотел бы выполнить тот же процесс, используя Pandas read_csv, но я обнаружил, что он не использует dtype таким же образом, как Numpy.
Я определил dtype, подходящий для Pandas:
myPandasdtype = {'Date': 'a10','Val':'f8','Fruit': 'a10', 'ValArray':'3f8'}
и использовал Pandas read_csv как:
PData = PD.read_csv('My input file', dtype=myPandasdtype , sep=',', header=None)
но обнаружил, что Pandas выдал мне фрейм данных, содержащий индекс даты, поле с плавающей точкой, строковое поле и еще три поля с плавающей точкой.
Однако я хотел бы, чтобы последние три поля с плавающей запятой считывались как массив из трех значений с плавающей запятой и чтобы поля именовались с использованием меток dtype.
Возможно ли это сделать в Pandas?