Bagaimana untuk mendapatkan nilai dari sel dataframe?

Aku telah membangun sebuah kondisi bahwa ekstrak tepat satu baris dari data frame:

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

Sekarang saya ingin mengambil nilai dari kolom tertentu:

val = d2['col_name']

Tapi akibatnya saya mendapatkan sebuah frame data yang berisi satu baris dan satu kolom (yaitu satu sel). Hal ini tidak apa yang saya butuhkan. Aku butuh satu nilai (satu float number). Bagaimana saya bisa melakukan itu di panda?

Mengomentari pertanyaan (1)
Larutan

Jika anda memiliki DataFrame dengan hanya satu baris, maka akses pertama (hanya) turut sebagai Rangkaian menggunakan iloc, dan kemudian nilai menggunakan nama kolom:

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
Komentar (4)

Ini adalah akses cepat untuk skalar

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
Komentar (3)

Anda dapat mengubah 1x1 dataframe menjadi numpy array, maka akses pertama dan satu-satunya nilai dari array:

val = d2['col_name'].values[0]
Komentar (4)

Kebanyakan jawaban adalah dengan menggunakan iloc yang baik untuk seleksi oleh posisi.

Jika anda membutuhkan pilihan-by-label loc akan menjadi lebih nyaman.

Untuk mendapatkan nilai tegas (equiv untuk ditinggalkan df.get_value('a','A'))

ini juga setara dengan df1.di['a','A']

Di [55]: df1.loc['a', 'A'] Keluar[55]: 0.13200317033032932

Komentar (0)

Sepertinya perubahan setelah panda 10.1/13.1

Saya upgrade dari 10.1 untuk 13.1, sebelum iloc tidak tersedia.

Sekarang dengan 13.1, iloc[0]['label'] mendapat satu nilai array bukan skalar.

Seperti ini:

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

Output:

date
2014-02-26 118.2
name:Close, dtype: float64
Komentar (3)

Aku butuh nilai dari satu sel, yang dipilih oleh kolom dan indeks nama. Solusi ini bekerja untuk saya:

original_conversion_frequency.loc[1,:].nilai-nilai[0]

Komentar (0)

Tercepat/pilihan paling mudah saya telah menemukan berikut. 501 merupakan indeks baris.

df.at[501,'column_name']
df.get_value(501,'column_name')
Komentar (1)

Tidak yakin jika ini adalah praktik yang baik, tapi aku menyadari bahwa aku juga bisa mendapatkan nilai dengan casting serial seperti mengambang.

misalnya

rate

3 0.042679

Nama: Unemployment_rate, dtype: float64

float(rate)

0.0426789

Komentar (1)

Untuk panda 0.10, di mana iloc adalah unavalable, filter DF dan mendapatkan baris pertama data untuk kolom NILAI:

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

jika ada lebih dari 1 baris disaring, mendapatkan baris pertama nilai. Akan ada pengecualian jika filter mengakibatkan kosong data frame.

Komentar (2)
df_gdp.columns

Index([u'Negara', u'Kode Negara', u'Indikator Nama', u'Indikator Kode', u'1960', u'1961', u'1962', u'1963', u'1964', u'1965', u'1966', u'1967', u'1968', u'1969', u'1970', u'1971', u'1972', u'1973', u'1974', u'1975', u'1976', u'1977', u'1978', u'1979', u'1980', u'1981', u'1982', u'1983', u'1984', u'1985', u'1986', u'1987', u'1988', u'1989', u'1990', u'1991', u'1992', u'1993', u'1994', u'1995', u'1996', u'1997', u'1998', u'1999', u'2000', u'2001', u'2002', u'2003', u'2004', u'2005', u'2006', u'2007', u'2008', u'2009', u'2010', u'2011', u'2012', u'2013', u'2014', u'2015', u'2016'], dtype='objek')

df_gdp[df_gdp["Country Code"] == "USA"]["1996"].values[0]

8100000000000.0

Komentar (2)