Saya telah membangun suatu kondisi yang mengekstrak tepat satu baris dari bingkai data saya:
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']
Tetapi sebagai hasilnya saya mendapatkan bingkai data yang berisi satu baris dan satu kolom ( yaitu satu sel). Bukan itu yang saya butuhkan. Saya butuh satu nilai (satu angka float). Bagaimana saya bisa melakukannya di panda?
SettingWithCopyWarning
, Anda dapat melihat posting ini untuk penjelasan tentang peringatan dan kemungkinan solusi / solusi.Jawaban:
Jika Anda memiliki DataFrame dengan hanya satu baris, akses baris pertama (hanya) sebagai Seri menggunakan
iloc
, dan kemudian nilainya menggunakan nama kolom:sumber
at
adalah jawaban yang sangat bagus, meskipun saya merasa aneh itu sepertiix
:))my_df.loc[my_df['Col1'] == foo]['Col2']
masih mengembalikan objek bertipe<class 'pandas.core.series.Series'>
Ini adalah akses cepat untuk skalar
sumber
.iloc[-1]['A']
Anda tidak bisa melakukannyaat[-1,'A']
untuk mendapatkan entri baris terakhirat[df.index[-1],'A']
Anda dapat mengubah kerangka data 1x1 Anda menjadi array numpy, lalu mengakses nilai pertama dan satu-satunya dari array itu:
sumber
.get_values()[0]
juga.Sebagian besar jawaban menggunakan
iloc
yang bagus untuk pemilihan berdasarkan posisi.Jika Anda memerlukan pemilihan-oleh-label
loc
akan lebih mudah.sumber
Saya membutuhkan nilai satu sel, dipilih oleh nama kolom dan indeks. Solusi ini bekerja untuk saya:
original_conversion_frequency.loc[1,:].values[0]
sumber
Sepertinya perubahan setelah panda 10.1 / 13.1
Saya memutakhirkan dari 10.1 ke 13.1, sebelum iloc tidak tersedia.
Sekarang dengan 13.1,
iloc[0]['label']
dapatkan array nilai tunggal daripada skalar.Seperti ini:
Keluaran:
sumber
Opsi tercepat / termudah yang saya temukan adalah sebagai berikut. 501 mewakili indeks baris.
sumber
get_value
sudah ditinggalkan sekarang (v0.21.0 RC1 (13 Oktober 2017)) referensi ada di sini.get_value and .set_value on Series, DataFrame, Panel, SparseSeries, and SparseDataFrame are deprecated in favor of using .iat[] or .at[] accessors (GH15269)
Untuk panda 0.10, jika tidak
iloc
dapat dihindari, filter aDF
dan dapatkan data baris pertama untuk kolomVALUE
:jika ada lebih dari 1 baris yang difilter, dapatkan nilai baris pertama. Akan ada pengecualian jika filter menghasilkan bingkai data kosong.
sumber
get_value
sudah tidak digunakan lagi sekarang (v0.21.0 RC1 (13 Oktober 2017)) referensi ada di sini.get_value and .set_value on Series, DataFrame, Panel, SparseSeries, and SparseDataFrame are deprecated in favor of using .iat[] or .at[] accessors (GH15269)
iat
atauat
tidak bisa mendapatkan nilai berdasarkan nama kolom.Tidak yakin apakah ini adalah latihan yang baik, tetapi saya perhatikan saya juga bisa mendapatkan nilai hanya dengan casting seri sebagai
float
.misalnya
sumber
Tidak perlu rumit:
sumber
sumber