Як атрымаць значэнне з вочка dataframe?

Я пабудаваў ўмова, выняць роўна адну радок з майго кадра дадзеных:

d2 = df[(df['l_ext']==l_ext) & (df['item']==item) & (df['wn']==wn) & (df['wd']==1)]

Цяпер я хацеў бы ўзяць значэнне з пэўнага слупка:

val = d2['col_name']

Але ў выніку я атрымліваю кадр дадзеных, які змяшчае адну радок і адзін слупок ( гэта значыць. адна клетка). Гэта не тое, што мне трэба. Мне трэба адно значэнне (адзін нумар з якая плавае кропкай). Як я магу зрабіць гэта ў панд?

155

16 адказы

Калі ў вас ёсць DataFrame толькі з аднаго радка, а затым атрымаць доступ да першай (толькі) радок у выглядзе серыі, выкарыстоўваючы 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
192
дададзена
Звярніце ўвагу, што гэтае рашэнне вяртае серыю, а не ад значэння!
дададзена аўтар Atte Juvonen, крыніца
@Sophologist гледзячы на ​​гэта, я паняцця не маю. Пытанне крыху дзіўна сфармуляваны, але чытаецца як першая палова не мае значэння для апошніх. (<�Код> у гэта сапраўды добры адказ, хоць я знаходжу гэта дзіўным, гэта як IX :))
дададзена аўтар Andy Hayden, крыніца
@AtteJuvonen Гэта залежыць ад таго, калі ў вас ёсць дублікаты ў індэксе/калонцы (звярніце ўвагу на/IAT выклікае выключэнне з дубляванымі слупкамі, падасць пытанне).
дададзена аўтар Andy Hayden, крыніца
Ці з'яўляецца гэта яшчэ лепшае рашэнне пяць гадоў праз? Гэта не здаецца, што інтуітыўна аўтсайдару ...
дададзена аўтар tommy.carstensen, крыніца
@Sophologist Я згодны, што яго смешна, што гэта неабходна. Ён таксама не працуе, калі вы спрабуеце перадаць инлайн умоўных выразаў; <�Код> my_df.loc [my_df [ 'COL1'] == Foo] [ 'Col2'] яшчэ вяртае аб'ект тыпу <�клас 'pandas.core.series.Series'> </код >
дададзена аўтар user5359531, крыніца
Дзякуй! для адказу - хто-небудзь яшчэ знайсці той факт, што гэтае рашэнне толькі за смешны?
дададзена аўтар one_observation, крыніца

Калі ў вас ёсць DataFrame толькі з аднаго радка, а затым атрымаць доступ да першай (толькі) радок у выглядзе серыі, выкарыстоўваючы 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
192
дададзена
Звярніце ўвагу, што гэтае рашэнне вяртае серыю, а не ад значэння!
дададзена аўтар Atte Juvonen, крыніца
@Sophologist гледзячы на ​​гэта, я паняцця не маю. Пытанне крыху дзіўна сфармуляваны, але чытаецца як першая палова не мае значэння для апошніх. (<�Код> у гэта сапраўды добры адказ, хоць я знаходжу гэта дзіўным, гэта як IX :))
дададзена аўтар Andy Hayden, крыніца
@AtteJuvonen Гэта залежыць ад таго, калі ў вас ёсць дублікаты ў індэксе/калонцы (звярніце ўвагу на/IAT выклікае выключэнне з дубляванымі слупкамі, падасць пытанне).
дададзена аўтар Andy Hayden, крыніца
Ці з'яўляецца гэта яшчэ лепшае рашэнне пяць гадоў праз? Гэта не здаецца, што інтуітыўна аўтсайдару ...
дададзена аўтар tommy.carstensen, крыніца
@Sophologist Я згодны, што яго смешна, што гэта неабходна. Ён таксама не працуе, калі вы спрабуеце перадаць инлайн умоўных выразаў; <�Код> my_df.loc [my_df [ 'COL1'] == Foo] [ 'Col2'] яшчэ вяртае аб'ект тыпу <�клас 'pandas.core.series.Series'> </код >
дададзена аўтар user5359531, крыніца
Дзякуй! для адказу - хто-небудзь яшчэ знайсці той факт, што гэтае рашэнне толькі за смешны?
дададзена аўтар one_observation, крыніца

Гэта хуткі доступ для скаляраў

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
95
дададзена
гэта павінна быць адказ, таму што мы не які капіюецца ў памяці аб бескарысных лініях, каб атрымаць толькі адзін элемент ўнутры.
дададзена аўтар bormat, крыніца
Мне падабаецца гэты адказ шмат. Але ў той час як вы можаце зрабіць .iloc [-1] [ 'A'] вы не можаце зрабіць на [-1, 'A'] , каб атрымаць апошнюю запіс радкі
дададзена аўтар hartmut, крыніца

Гэта хуткі доступ для скаляраў

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
95
дададзена
гэта павінна быць адказ, таму што мы не які капіюецца ў памяці аб бескарысных лініях, каб атрымаць толькі адзін элемент ўнутры.
дададзена аўтар bormat, крыніца
Мне падабаецца гэты адказ шмат. Але ў той час як вы можаце зрабіць .iloc [-1] [ 'A'] вы не можаце зрабіць на [-1, 'A'] , каб атрымаць апошнюю запіс радкі
дададзена аўтар hartmut, крыніца

Падобна на тое, што змены пасля панд 10,1/13,1

Я павышаны з 10,1 да 13,1, да таго iloc не даступны.

Зараз з 13.1 iloc [0] [ «пазнакі"] атрымлівае адзіны масіў значэнняў, а не скаляр.

Як гэта:

lastprice=stock.iloc[-1]['Close']

выхад:

date
2014-02-26 118.2
name:Close, dtype: float64
10
дададзена
Калі вы можаце даць прыклад цацкі прадэманстраваць гэта ў адказе, што было б вельмі карысна!
дададзена аўтар Andy Hayden, крыніца
Я думаю, што гэта павінна быць толькі ў выпадку серыі з дубляваннем запісаў ... на самай справе, я не бачу ў гэтым, маглі б вы даць невялікі прыклад, каб прадэманстраваць гэта?
дададзена аўтар Andy Hayden, крыніца
я выкарыстаў панд 13.x, як выхад iloc [] [] або iloc [] скаляр. толькі iloc не працуе з адмоўным індэксам, як -1
дададзена аўтар timeislove, крыніца

Падобна на тое, што змены пасля панд 10,1/13,1

Я павышаны з 10,1 да 13,1, да таго iloc не даступны.

Зараз з 13.1 iloc [0] [ «пазнакі"] атрымлівае адзіны масіў значэнняў, а не скаляр.

Як гэта:

lastprice=stock.iloc[-1]['Close']

выхад:

date
2014-02-26 118.2
name:Close, dtype: float64
10
дададзена
Калі вы можаце даць прыклад цацкі прадэманстраваць гэта ў адказе, што было б вельмі карысна!
дададзена аўтар Andy Hayden, крыніца
Я думаю, што гэта павінна быць толькі ў выпадку серыі з дубляваннем запісаў ... на самай справе, я не бачу ў гэтым, маглі б вы даць невялікі прыклад, каб прадэманстраваць гэта?
дададзена аўтар Andy Hayden, крыніца
я выкарыстаў панд 13.x, як выхад iloc [] [] або iloc [] скаляр. толькі iloc не працуе з адмоўным індэксам, як -1
дададзена аўтар timeislove, крыніца

Большасць адказаў, выкарыстоўваючы iloc які добры для адбору пазіцыі.

Калі вам трэба выбар-на-налепцы < код> LOC будзе зручней.

<�Р> Для атрымання значэння ў відавочным выглядзе (эквив да састарэлым   df.get_value ( 'а', 'А')) </р> <�Папярэдне> # гэта таксама эквівалентна df1.at [ 'а', 'A'] У працы [55]: df1.loc [ 'а', 'A'] З [55]: ,13200317033032932
8
дададзена

Большасць адказаў, выкарыстоўваючы iloc які добры для адбору пазіцыі.

Калі вам трэба выбар-на-налепцы < код> LOC будзе зручней.

<�Р> Для атрымання значэння ў відавочным выглядзе (эквив да састарэлым   df.get_value ( 'а', 'А')) </р> <�Папярэдне> # гэта таксама эквівалентна df1.at [ 'а', 'A'] У працы [55]: df1.loc [ 'а', 'A'] З [55]: ,13200317033032932
8
дададзена

Вы можаце ператварыць ваш 1x1 dataframe ў Numpy масіў, а затым атрымаць доступ да першага і толькі значэнне гэтага масіва:

val = d2['col_name'].values[0]
7
дададзена
Рэдагаваць ваш першапачатковы адказ з гэтым да стварэння каментара. дзякуй
дададзена аўтар Franck Gamess, крыніца
Калі ласка, палепшыць якасць вашага адказу з трохі больш падрабязным тлумачэннем.
дададзена аўтар Franck Gamess, крыніца
d2 [ «col_name»]. Значэнні вяртае Numpy ўяўленне слупка. Бо d2 [ «имя_столбца»] ўяўляе сабой кадр дадзеных, які змяшчае адну радок і адзін слупок (г.зн. адна клетка), ёсць толькі адзін элемент у масіве. Мы можам атрымаць доступ да гэтага элементу па індэксе масіва. Для мяне гэты метад з'яўляецца хуткім і простым. Ці значыць гэта зрабіць, не мае сэнсу? Калі гэтага не адбудзецца, я выдалю пост. Дзякуй!
дададзена аўтар Guillaume, крыніца
Дзякуй! Дайце мне ведаць, калі вы знойдзеце лепшую фармулёўку!
дададзена аўтар Guillaume, крыніца
Я аддаю перавагу гэты метад і выкарыстоўваць яго часта. Выкарыстоўваецца для выкарыстання .get_values ​​() [0] а.
дададзена аўтар aaronpenne, крыніца

Вы можаце ператварыць ваш 1x1 dataframe ў Numpy масіў, а затым атрымаць доступ да першага і толькі значэнне гэтага масіва:

val = d2['col_name'].values[0]
7
дададзена
Рэдагаваць ваш першапачатковы адказ з гэтым да стварэння каментара. дзякуй
дададзена аўтар Franck Gamess, крыніца
Калі ласка, палепшыць якасць вашага адказу з трохі больш падрабязным тлумачэннем.
дададзена аўтар Franck Gamess, крыніца
d2 [ «col_name»]. Значэнні вяртае Numpy ўяўленне слупка. Бо d2 [ «имя_столбца»] ўяўляе сабой кадр дадзеных, які змяшчае адну радок і адзін слупок (г.зн. адна клетка), ёсць толькі адзін элемент у масіве. Мы можам атрымаць доступ да гэтага элементу па індэксе масіва. Для мяне гэты метад з'яўляецца хуткім і простым. Ці значыць гэта зрабіць, не мае сэнсу? Калі гэтага не адбудзецца, я выдалю пост. Дзякуй!
дададзена аўтар Guillaume, крыніца
Дзякуй! Дайце мне ведаць, калі вы знойдзеце лепшую фармулёўку!
дададзена аўтар Guillaume, крыніца
Я аддаю перавагу гэты метад і выкарыстоўваць яго часта. Выкарыстоўваецца для выкарыстання .get_values ​​() [0] а.
дададзена аўтар aaronpenne, крыніца

Не ўпэўнены, што гэта добрая практыка, але я заўважыў, што я таксама магу атрымаць толькі значэнне адліўкай серыі, як флоат .

напрыклад

rate
<�Р> 3 0,042679 </р>      <�Р> Імя: Unemployment_rate, DTYPE: float64
float(rate)
<�Р> 0.0426789 </р>
3
дададзена

Не ўпэўнены, што гэта добрая практыка, але я заўважыў, што я таксама магу атрымаць толькі значэнне адліўкай серыі, як флоат .

напрыклад

rate
<�Р> 3 0,042679 </р>      <�Р> Імя: Unemployment_rate, DTYPE: float64
float(rate)
<�Р> 0.0426789 </р>
3
дададзена

Самыя хуткія/лёгкія варыянты, якія я знайшоў у наступным. 501 уяўляе сабой індэкс радка.

df.at[501,'column_name']
df.get_value(501,'column_name')
2
дададзена
<�Код> get_value асуджаецца цяпер (v0.21.0 RC1 (13 кастрычніка 2017)) спасылка тут .get_value і .set_value на серыі, DataFrame, панэль, SparseSeries і SparseDataFrame асуджаюцца на карысць выкарыстання .iat [] або .at [] аксессоры (GH15269)
дададзена аўтар Shihe Zhang, крыніца

Самыя хуткія/лёгкія варыянты, якія я знайшоў у наступным. 501 уяўляе сабой індэкс радка.

df.at[501,'column_name']
df.get_value(501,'column_name')
2
дададзена
<�Код> get_value асуджаецца цяпер (v0.21.0 RC1 (13 кастрычніка 2017)) спасылка тут .get_value і .set_value на серыі, DataFrame, панэль, SparseSeries і SparseDataFrame асуджаюцца на карысць выкарыстання .iat [] або .at [] аксессоры (GH15269)
дададзена аўтар Shihe Zhang, крыніца

Для панд 0,10, дзе iloc гэта unavalable, фільтр з DF і атрымаць першыя дадзеныя радкі для слупка Значэнне :

df_filt = df[df['C1'] == C1val & df['C2'] == C2val]
result = df_filt.get_value(df_filt.index[0],'VALUE')

калі ёсць больш за 1 шэраг фільтруюць, атрымліваюць першае значэнне радка. Там будзе выключэнне, калі фільтр прыводзіць да пустым кадру дадзеных.

1
дададзена
<�Код> get_value асуджаецца цяпер (v0.21.0 RC1 (13 кастрычніка 2017)) спасылка тут .get_value і .set_value на серыі, DataFrame, панэль, SparseSeries і SparseDataFrame асуджаюцца на карысць выкарыстання .iat [] або .at [] аксессоры (GH15269)
дададзена аўтар Shihe Zhang, крыніца

Для панд 0,10, дзе iloc гэта unavalable, фільтр з DF і атрымаць першыя дадзеныя радкі для слупка Значэнне :

df_filt = df[df['C1'] == C1val & df['C2'] == C2val]
result = df_filt.get_value(df_filt.index[0],'VALUE')

калі ёсць больш за 1 шэраг фільтруюць, атрымліваюць першае значэнне радка. Там будзе выключэнне, калі фільтр прыводзіць да пустым кадру дадзеных.

1
дададзена
<�Код> get_value асуджаецца цяпер (v0.21.0 RC1 (13 кастрычніка 2017)) спасылка тут .get_value і .set_value на серыі, DataFrame, панэль, SparseSeries і SparseDataFrame асуджаюцца на карысць выкарыстання .iat [] або .at [] аксессоры (GH15269)
дададзена аўтар Shihe Zhang, крыніца