Saya yakin ada cara yang jelas untuk melakukan ini tetapi tidak dapat memikirkan sesuatu yang licin sekarang.
Pada dasarnya alih-alih meningkatkan pengecualian, saya ingin mendapatkan True
atau False
melihat apakah ada nilai dalam df
indeks pandas .
import pandas as pd
df = pd.DataFrame({'test':[1,2,3,4]}, index=['a','b','c','d'])
df.loc['g'] # (should give False)
Apa yang saya kerjakan sekarang adalah sebagai berikut
sum(df.index == 'g')
Jawaban:
Ini seharusnya berhasil
'g' in df.index
sumber
n
, maka tupel dengan panjang berapa pun1..n
dapat diperiksa'g' in df.columns
jika kerangka data Anda ditentukan dengan tajuk kolom daripada indeks, misalnya:df = pandas.DataFrame({'test':[1,2,3,4]}, columns=['a','b','c','d'])
Hanya untuk referensi karena itu adalah sesuatu yang saya cari, Anda dapat menguji keberadaan dalam nilai atau indeks dengan menambahkan metode ".values", misalnya
g in df.<your selected field>.values g in df.index.values
Saya menemukan bahwa menambahkan ".values" untuk mendapatkan daftar sederhana atau ndarray out membuat ada atau "dalam" pemeriksaan berjalan lebih lancar dengan alat python lainnya. Hanya berpikir saya akan melemparkannya ke luar sana untuk orang-orang.
sumber
in g in df.index
menghasilkan benar danin g in df.index.values
salah. Menarik.Multi index bekerja sedikit berbeda dari single index. Berikut beberapa metode untuk dataframe multi-indeks.
df = pd.DataFrame({'col1': ['a', 'b','c', 'd'], 'col2': ['X','X','Y', 'Y'], 'col3': [1, 2, 3, 4]}, columns=['col1', 'col2', 'col3']) df = df.set_index(['col1', 'col2'])
in df.index
bekerja untuk tingkat pertama hanya saat memeriksa nilai indeks tunggal.'a' in df.index # True 'X' in df.index # False
Periksa
df.index.levels
level lainnya.'a' in df.index.levels[0] # True 'X' in df.index.levels[1] # True
Periksa
df.index
tupel kombinasi indeks.('a', 'X') in df.index # True ('a', 'Y') in df.index # False
sumber
dengan DataFrame: df_data
>>> df_data id name value 0 a ampha 1 1 b beta 2 2 c ce 3
Saya mencoba:
>>> getattr(df_data, 'value').isin([1]).any() True >>> getattr(df_data, 'value').isin(['1']).any() True
tapi:
>>> 1 in getattr(df_data, 'value') True >>> '1' in getattr(df_data, 'value') False
Sangat menyenangkan: D
sumber
isin
tidak akan memeriksa dtype tersebut.df['value'].isin([True]).any()
coba ini, itu juga akan memberi Anda Benar, Karena cocok dengan1
.True -> 1
.Kode di bawah ini tidak mencetak boolean, tetapi memungkinkan subset dataframe berdasarkan indeks ... Saya mengerti ini mungkin bukan cara yang paling efisien untuk menyelesaikan masalah, tetapi saya (1) suka cara membaca ini dan (2) Anda dapat dengan mudah membuat subset di mana indeks df1 ada di df2:
atau di mana indeks df1 tidak ada di df2 ...
sumber
df = pandas.DataFrame({'g':[1]}, index=['isStop']) #df.loc['g'] if 'g' in df.index: print("find g") if 'isStop' in df.index: print("find a")
sumber