Я построил условие, которое извлекает ровно одну строку из моего фрейма данных:
d2 = df[(df['l_ext']==l_ext) & (df['item']==item) & (df['wn']==wn) & (df['wd']==1)]
Теперь я хотел бы взять значение из определенного столбца:
val = d2['col_name']
Но в результате я получаю фрейм данных, который содержит одну строку и один столбец ( то есть одну ячейку). Это не то, что мне нужно. Мне нужно одно значение (одно число с плавающей запятой). Как я могу сделать это в пандах?
SettingWithCopyWarning
, вы можете взглянуть на этот пост для объяснения предупреждения и возможных обходных путей / решений.Ответы:
Если у вас есть DataFrame только с одной строкой, то получите доступ к первой (только) строке как к Series, используя
iloc
, а затем к значению, используя имя столбца:источник
at
это действительно хороший ответ, хотя я нахожу странным, что это похоже наix
:))my_df.loc[my_df['Col1'] == foo]['Col2']
по-прежнему возвращает объект типа<class 'pandas.core.series.Series'>
Это быстрый доступ к скалярам
источник
.iloc[-1]['A']
вы не можете сделать,at[-1,'A']
чтобы получить последнюю запись строкиat[df.index[-1],'A']
Вы можете превратить ваш массив данных 1x1 в пустой массив, а затем получить доступ к первому и единственному значению этого массива:
источник
.get_values()[0]
также.Большинство ответов используют,
iloc
что хорошо для выбора по позиции.Если вам нужен выбор по метке,
loc
было бы удобнее.источник
Мне нужно было значение одной ячейки, выбранной по именам столбцов и индексов. Это решение сработало для меня:
original_conversion_frequency.loc[1,:].values[0]
источник
Похоже, изменения после панд 10.1 / 13.1
Я обновил с 10.1 до 13.1, до того, как iloc не доступен.
Теперь с 13.1,
iloc[0]['label']
получает массив с одним значением, а не скаляр.Как это:
Вывод:
источник
Самые быстрые / легкие варианты, которые я нашел, следующие. 501 представляет индекс строки.
источник
get_value
устарела (v0.21.0 RC1 (13 октября 2017 г.)) ссылка здесь.get_value and .set_value on Series, DataFrame, Panel, SparseSeries, and SparseDataFrame are deprecated in favor of using .iat[] or .at[] accessors (GH15269)
Для панд 0.10, где
iloc
недоступен, отфильтруйте aDF
и получите данные первой строки для столбцаVALUE
:если отфильтровано более 1 строки, получите значение первой строки. Будет исключение, если фильтр приведет к пустому фрейму данных.
источник
get_value
устарела (v0.21.0 RC1 (13 октября 2017 г.)) ссылка здесь.get_value and .set_value on Series, DataFrame, Panel, SparseSeries, and SparseDataFrame are deprecated in favor of using .iat[] or .at[] accessors (GH15269)
iat
илиat
не может получить значение на основе имени столбца.Не уверен, что это хорошая практика, но я заметил, что могу также получить только значение, приведя серию как
float
.например
источник
Это не должно быть сложным:
источник
источник