Я создал условие, которое извлекает ровно одну строку из моего фрейма данных:
d2 = df[(df['l_ext']==l_ext) & (df['item']==item) & (df['wn']==wn) & (df['wd']==1)]
Теперь я хочу взять значение из определенного столбца:
val = d2['col_name']
Но в результате я получаю кадр данных, содержащий одну строку и один столбец (т.е. одну ячейку). Это не то, что мне нужно. Мне нужно одно значение (одно плавающее число). Как я могу сделать это в pandas?
Если у вас есть DataFrame только с одной строкой, то получите доступ к первой (единственной) строке как к Series, используя iloc
, а затем к значению, используя имя столбца:
In [3]: sub_df
Out[3]:
A B
2 -0.133653 -0.030854
In [4]: sub_df.iloc[0]
Out[4]:
A -0.133653
B -0.030854
Name: 2, dtype: float64
In [5]: sub_df.iloc[0]['A']
Out[5]: -0.13365288513107493
Это быстрый доступ для скаляров
In [15]: df = pandas.DataFrame(numpy.random.randn(5,3),columns=list('ABC'))
In [16]: df
Out[16]:
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
In [17]: df.iat[0,0]
Out[17]: -0.074171888537611502
In [18]: df.at[0,'A']
Out[18]: -0.074171888537611502
Вы можете превратить ваш 1х1 таблицы данных в массив NumPy, затем открыть первое и единственное значение этого массива:
val = d2['col_name'].values[0]
Большинство ответов, используя Мот
что хорошо для отбора на позиции.
Если вам нужно выбор-по-лейбла лок
будет более удобным.
для получения явного значения (экв нерекомендуемый ДФ.число('Это','Это'))
это эквивалентно df1.на['Это','Это']
В [55]: df1.Лок['Это', 'Это'] из[55]: 0.13200317033032932
Это похоже на изменения после выхода pandas 10.1/13.1
Я обновился с 10.1 до 13.1, до этого iloc был недоступен.
Теперь в 13.1, iloc[0]['label']
получает массив с одним значением, а не скаляр.
Например:
lastprice=stock.iloc[-1]['Close']
Выход:
date
2014-02-26 118.2
name:Close, dtype: float64
Самый быстрый/простой вариантов я нашел следующие. 501 индекс строки.
df.at[501,'column_name']
df.get_value(501,'column_name')
Не уверен, если это хорошая практика, но я заметил, я могу получить только значение на кастинг сериала как плавают
.
например
rate
3 0.042679
название: Unemployment_rate, dtype: float64
float(rate)
0.0426789
Для панды 0.10, где МОТ
, которая становится недоступна, фильтр ДФ
и получить первые данные строки в графу "Стоимость":
df_filt = df[df['C1'] == C1val & df['C2'] == C2val]
result = df_filt.get_value(df_filt.index[0],'VALUE')
если есть более 1 строки отфильтрованы, получить первое значение строки. Будет исключение, если фильтр результатов в пустой фрейм данных.
df_gdp.columns
индекс([у'страна', у'код страны', у'Наименование показателя', у'индикатор код', у'1960', у'1961', у'1962', у'1963', у'1964', у'1965', у'1966', у'1967', у'1968', у'1969', у'1970', у'1971', у'1972', у'1973', у'1974', у'1975', у'1976', у'1977', у'1978', у'1979', у'1980', у'1981', у'1982', у'1983', у'1984', у'1985', у'1986', у'1987', у'1988', у'1989', у'1990', у'1991', у'1992', у'1993', у'1994', у'1995', у'1996', у'1997', у'1998', у'1999', у'2000', у'2001', у'2002', у'2003', у'2004', у'2005', у'2006', у'2007', у'2008', у'2009', у'2010', у'2011', у'2012', у'2013', у'2014', у'2015', у'2016'], dtype='объект')
df_gdp[df_gdp["Country Code"] == "USA"]["1996"].values[0]
8100000000000.0