Знаете ли вы, как получить индекс или столбец DataFrame в виде массива NumPy или списка Python?
Знаете ли вы, как получить индекс или столбец DataFrame в виде массива NumPy или списка Python?
Ответы:
Чтобы получить массив NumPy, вы должны использовать valuesатрибут:
In [1]: df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['a', 'b', 'c']); df
A B
a 1 4
b 2 5
c 3 6
In [2]: df.index.values
Out[2]: array(['a', 'b', 'c'], dtype=object)
Это дает доступ к тому, как данные уже сохранены, поэтому нет необходимости в преобразовании.
Примечание. Этот атрибут также доступен для объектов многих других панд.
In [3]: df['A'].values
Out[3]: Out[16]: array([1, 2, 3])
Чтобы получить индекс в виде списка, позвоните tolist:
In [4]: df.index.tolist()
Out[4]: ['a', 'b', 'c']
И аналогично для столбцов.
.valuesустарело, .to_numpy()является рекомендуемой заменой, если вы хотите массив NumPy. Можете ли вы расширить это Доступ к тому, как данные уже хранятся, поэтому нет необходимости для преобразования ?
Вы можете использовать df.indexдля доступа к объекту индекса, а затем получить значения в списке с помощью df.index.tolist(). Точно так же вы можете использовать df['col'].tolist()для серии.
df.index.values.tolist()
df.index.tolist()не возвращает метод экземпляра. Возвращает список индексов. Это метод, определенный по индексу панд. В то время как первый вызов значения возможен, делегирование задания numpy - это не исправление, а альтернатива.
.valuesв пользу этих методов!С v0.24.0 года, мы будем иметь два бренда Порка новые, предпочтительные способы получения Numpy массивов из Index, Seriesи DataFrameобъекты: они to_numpy(), и .array. Что касается использования, документы упоминают:
Мы не удалили или устарели
Series.valuesилиDataFrame.values, но мы настоятельно рекомендуем и использовать.arrayили.to_numpy()вместо.
См. Этот раздел примечаний к выпуску v0.24.0 для получения дополнительной информации.
df.index.to_numpy()
# array(['a', 'b'], dtype=object)
df['A'].to_numpy()
# array([1, 4])
По умолчанию представление возвращается. Любые сделанные изменения будут влиять на оригинал.
v = df.index.to_numpy()
v[0] = -1
df
A B
-1 1 2
b 4 5
Если вам нужна копия, используйте to_numpy(copy=True);
v = df.index.to_numpy(copy=True)
v[-1] = -123
df
A B
a 1 2
b 4 5
Обратите внимание, что эта функция также работает для DataFrames (пока .arrayнет).
arrayАтрибут
Этот атрибут возвращаетExtensionArrayобъект, который поддерживает индекс / серию.
pd.__version__
# '0.24.0rc1'
# Setup.
df = pd.DataFrame([[1, 2], [4, 5]], columns=['A', 'B'], index=['a', 'b'])
df
A B
a 1 2
b 4 5
df.index.array
# <PandasArray>
# ['a', 'b']
# Length: 2, dtype: object
df['A'].array
# <PandasArray>
# [1, 4]
# Length: 2, dtype: int64
Отсюда можно получить список, используя list:
list(df.index.array)
# ['a', 'b']
list(df['A'].array)
# [1, 4]
или просто позвоните .tolist():
df.index.tolist()
# ['a', 'b']
df['A'].tolist()
# [1, 4]
Относительно того, что возвращено, документы упоминают,
Для
SeriesиIndexпри поддержке обычных массивов NumPySeries.arrayвернет новыйarrays.PandasArray, который является тонкой (без копирования) оболочкой вокругnumpy.ndarray.arrays.PandasArrayсам по себе не особенно полезен, но обеспечивает тот же интерфейс, что и любой массив расширений, определенный в pandas или сторонней библиотеке.
Итак, подведем итог, .arrayвернемся либо
ExtensionArrayподдержка Индекс / Серия, илиExtensionArrayобъект создается в качестве тонкой оболочки над базовым массивом.Обоснование добавления ДВУХ новых методов
Эти функции были добавлены в результате обсуждений в двух выпусках GitHub GH19954 и GH23623 .
В частности, в документах упоминается обоснование:
[...] с
.valuesэтим было неясно, будет ли возвращаемое значение фактическим массивом, некоторым его преобразованием или одним из пользовательских массивов панд (напримерCategorical). Например, сPeriodIndex, каждый раз.valuesгенерирует новыеndarrayобъекты периода. [...]
Эти две функции направлены на улучшение согласованности API, что является важным шагом в правильном направлении.
Наконец, .valuesне будет устаревшим в текущей версии, но я ожидаю, что это может произойти в какой-то момент в будущем, поэтому я призываю пользователей перейти на более новый API, как только вы сможете.
Начиная с pandas v0.13 вы также можете использовать get_values:
df.index.get_values()
get_valuesпросто звонки .values. Больше символов для ввода.
Я преобразовал панд dataframeв listи затем использовал основные list.index(). Что-то вроде этого:
dd = list(zone[0]) #Where zone[0] is some specific column of the table
idx = dd.index(filename[i])
У вас есть значение индекса как idx.
Более свежий способ сделать это - использовать функцию .to_numpy ().
Если у меня есть фрейм данных со столбцом «цена», я могу преобразовать его следующим образом:
priceArray = df['price'].to_numpy()
Вы также можете передать тип данных, такой как float или object, в качестве аргумента функции
Ниже приведен простой способ преобразования столбца данных в массив массивов.
df = pd.DataFrame(somedict)
ytrain = df['label']
ytrain_numpy = np.array([x for x in ytrain['label']])
ytrain_numpy - это пустой массив.
Я пытался с, to.numpy()но он дал мне следующую ошибку:
TypeError: не поддерживается преобразование для типов: (dtype ('O'),) при выполнении классификации Binary Relevance с использованием Linear SVC. to.numpy () преобразовывал dataFrame в массив numpy, но тип данных внутреннего элемента был list, из-за чего наблюдалась вышеуказанная ошибка.
to_numpy, хотя.