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?
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
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
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
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
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
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.
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