Знаете ли вы, как получить индекс или столбец 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
, хотя.