Как получить значение из ячейки датафрейма?
Я создал условие, которое извлекает ровно одну строку из моего DataFrame:
d2 = df[(df['l_ext'] == l_ext) & (df['item'] == item) & (df['wn'] == wn) & (df['wd'] == 1)]
Теперь я хотел бы получить значение из определённого столбца:
val = d2['col_name']
Однако в результате я получаю DataFrame, содержащий одну строку и один столбец (т.е. одну ячейку). Это не то, что мне нужно. Мне нужно одно значение (одно число с плавающей запятой). Как я могу это сделать в pandas?
5 ответ(ов)
Вот быстрые методы доступа к скалярным значениям в DataFrame с использованием библиотеки pandas:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5, 3), columns=list('ABC'))
print(df)
После создания DataFrame он будет выглядеть примерно так:
A B C
0 -0.074172 -0.090626 0.038272
1 -0.128545 0.762088 -0.714816
2 0.201498 -0.734963 0.558397
3 1.563307 -1.186415 0.848246
4 0.205171 0.962514 0.037709
Чтобы получить доступ к конкретному значению (скалярному), вы можете использовать метод iat
для доступа по числовым индексам:
value = df.iat[0, 0]
print(value) # Вывод: -0.074171888537611502
Либо вы можете использовать метод at
, который позволяет обращаться к элементам по меткам:
value = df.at[0, 'A']
print(value) # Вывод: -0.074171888537611502
Оба метода обеспечивают быстрый доступ к элементам в DataFrame, но iat
и at
предназначены для доступа к отдельным элементам, в отличие от методов iloc
и loc
, которые могут использоваться для более широких выборок данных.
Вы можете получить значение из столбца col_name
, где wd
равно 1, с помощью следующего кода:
val = df.loc[df.wd == 1, 'col_name'].values[0]
Этот код ищет первую строку, где столбец wd
равен 1, и извлекает соответствующее значение из столбца col_name
. Обратите внимание, что это сработает только в том случае, если в выборке будет хотя бы одна строка, удовлетворяющая условию.
Если вам нужно получить значение одной ячейки, выбрав его по имени столбца и индексу, вы можете использовать следующий метод:
df.loc[1, :].values[0]
Этот код обращается к строке с индексом 1
и выбирает первое значение в этой строке. Такой подход отлично подходит для получения данных по индексам. Если вам нужно извлечь значение по имени столбца, вы можете сделать это более напрямую:
value = df.at[1, 'имя_столбца']
Замените 'имя_столбца'
на нужное вам имя столбца. Это будет более читаемым способом, если вы знаете, какой именно столбец вам нужен.
Самые быстрые и простые способы, которые я нашел, следующие. Здесь 501 представляет собой индекс строки.
df.at[501, 'column_name']
df.get_value(501, 'column_name')
Если вам нужно получить значение из определенной ячейки DataFrame, используйте метод at
, который оптимизирован для доступа к отдельным элементам. Метод get_value
, хотя и менее предпочтителен, также может быть использован, если вы работаете с более старыми версиями pandas. Однако помните, что get_value
был удален в последующих версиях, так что лучше использовать at
.
В более поздних версиях вы можете исправить это просто следующим образом:
val = float(d2['col_name'].iloc[0])
Как изменить порядок столбцов в DataFrame?
Как удалить строки DataFrame в Pandas с NaN в определённом столбце
Выбор нескольких колонок в DataFrame Pandas
Как выбрать строки из DataFrame на основе значений столбцов?
Объединение двух столбцов текста в DataFrame pandas