Saya mencoba menentukan apakah ada entri di kolom Panda yang memiliki nilai tertentu. Saya mencoba melakukan ini dengan if x in df['id']
. Saya pikir ini berhasil, kecuali ketika saya memberinya nilai yang saya tahu tidak ada di kolom 43 in df['id']
, masih dikembalikan True
. Ketika saya subset ke bingkai data hanya berisi entri yang cocok dengan id yang hilang df[df['id'] == 43]
, jelas, tidak ada entri di dalamnya. Bagaimana cara saya menentukan apakah kolom dalam bingkai data Pandas berisi nilai tertentu dan mengapa metode saya saat ini tidak berfungsi? (FYI, saya memiliki masalah yang sama ketika saya menggunakan implementasi dalam jawaban untuk pertanyaan serupa).
156
'a' in s.values
harus lebih cepat untuk Seri panjang.'a' in s
, panda memilih untuk memeriksa indeks daripada nilai-nilai seri? Dalam kamus mereka memeriksa kunci, tetapi seri panda harus berperilaku lebih seperti daftar atau larik, bukan?s.values
dandf.values
sangat tidak disarankan. Lihat ini . Juga,s.values
sebenarnya jauh lebih lambat dalam beberapa kasus..to_numpy
atau.array
tidak tersedia pada Seri, jadi saya tidak sepenuhnya yakin alternatif apa yang mereka anjurkan (saya tidak membaca "sangat kecil hati"). Sebenarnya mereka mengatakan bahwa nilai. Mungkin tidak mengembalikan array numpy, misalnya dalam kasus kategori ... tapi itu baik karenain
masih akan bekerja seperti yang diharapkan (memang lebih efisien bahwa itu adalah array array numpy)Anda juga dapat menggunakan panda.Series.isin meskipun sedikit lebih lama dari
'a' in s.values
:Tetapi pendekatan ini bisa lebih fleksibel jika Anda harus mencocokkan beberapa nilai sekaligus untuk DataFrame (lihat DataFrame.isin )
sumber
s.isin(['a']).any()
surat
found.count()
wasiat berisi jumlah kecocokanDan jika 0 maka berarti string tidak ditemukan di Kolom.
sumber
na=False
danregex=False
untuk kasus penggunaan saya, seperti yang dijelaskan di sini: pandas.pydata.org/pandas-docs/stable/reference/api/…Saya melakukan beberapa tes sederhana:
Menariknya tidak masalah jika Anda mencari 9 atau 999999, sepertinya butuh waktu yang sama menggunakan sintaks dalam (harus menggunakan pencarian biner)
Sepertinya menggunakan nilai x. adalah yang tercepat, tapi mungkin ada cara yang lebih elegan di panda?
sumber
Atau gunakan
Series.tolist
atauSeries.any
:Series.tolist
membuat daftar tentang aSeries
, dan yang lain saya hanya mendapatkan booleanSeries
dari regulerSeries
, lalu memeriksa apakah adaTrue
s di booleanSeries
.sumber
Kondisi sederhana:
sumber
Menggunakan
Jika
x
adaid
maka akan mengembalikan daftar indeks di mana ia hadir, kalau tidak memberikan daftar kosong.sumber
Saya tidak menyarankan untuk menggunakan "value in series", yang dapat menyebabkan banyak kesalahan. Silakan lihat jawaban ini untuk detail: Menggunakan operator dalam seri Pandas
sumber
Misalkan Anda dataframe terlihat seperti:
Sekarang Anda ingin memeriksa apakah nama file "80900026941984" ada dalam kerangka data atau tidak.
Anda cukup menulis:
sumber