Katakanlah dfadalah DataFrame pandas. Saya ingin mencari semua kolom tipe numerik. Sesuatu seperti:
isNumeric = is_numeric(df)
Katakanlah dfadalah DataFrame pandas. Saya ingin mencari semua kolom tipe numerik. Sesuatu seperti:
isNumeric = is_numeric(df)
Jawaban:
Anda bisa menggunakan select_dtypesmetode DataFrame. Ini mencakup dua parameter termasuk dan mengecualikan. Jadi isNumeric akan terlihat seperti:
numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']
newdf = df.select_dtypes(include=numerics)
list(df.select_dtypes(include=[np.number]).columns.values) untuk mendapatkan daftar nama kolom numerik
Anda bisa menggunakan fungsi tidak berdokumen _get_numeric_data()untuk memfilter kolom numerik saja:
df._get_numeric_data()
Contoh:
In [32]: data
Out[32]:
A B
0 1 s
1 2 s
2 3 s
3 4 s
In [33]: data._get_numeric_data()
Out[33]:
A
0 1
1 2
2 3
3 4
Perhatikan bahwa ini adalah "metode pribadi" (yaitu, detail penerapan) dan dapat berubah atau dihapus total di masa mendatang. Gunakan dengan hati-hati .
Jawaban satu baris sederhana untuk membuat kerangka data baru dengan hanya kolom numerik:
df.select_dtypes(include=np.number)
Jika Anda menginginkan nama kolom numerik:
df.select_dtypes(include=np.number).columns.tolist()
Kode lengkap:
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': range(7, 10),
'B': np.random.rand(3),
'C': ['foo','bar','baz'],
'D': ['who','what','when']})
df
# A B C D
# 0 7 0.704021 foo who
# 1 8 0.264025 bar what
# 2 9 0.230671 baz when
df_numerics_only = df.select_dtypes(include=np.number)
df_numerics_only
# A B
# 0 7 0.704021
# 1 8 0.264025
# 2 9 0.230671
colnames_numerics_only = df.select_dtypes(include=np.number).columns.tolist()
colnames_numerics_only
# ['A', 'B']
df.select_dtypes(include=['int64']).columns.tolist()
include=. select_dtypes(np.number)
df.fillna(value=0, inplace=True)
Satu baris sederhana:
df.select_dtypes('number').columns
Kode berikut akan mengembalikan daftar nama kolom numerik dari suatu kumpulan data.
cnames=list(marketing_train.select_dtypes(exclude=['object']).columns)
berikut marketing_trainadalah kumpulan data saya dan select_dtypes()berfungsi untuk memilih tipe data menggunakan exclude dan include argumen dan kolom digunakan untuk mengambil nama kolom dari kumpulan data output dari kode di atas adalah sebagai berikut:
['custAge',
'campaign',
'pdays',
'previous',
'emp.var.rate',
'cons.price.idx',
'cons.conf.idx',
'euribor3m',
'nr.employed',
'pmonths',
'pastEmail']
Terima kasih
def is_type(df, baseType):
import numpy as np
import pandas as pd
test = [issubclass(np.dtype(d).type, baseType) for d in df.dtypes]
return pd.DataFrame(data = test, index = df.columns, columns = ["test"])
def is_float(df):
import numpy as np
return is_type(df, np.float)
def is_number(df):
import numpy as np
return is_type(df, np.number)
def is_integer(df):
import numpy as np
return is_type(df, np.integer)
Mengadaptasi jawaban ini , Anda bisa melakukannya
df.ix[:,df.applymap(np.isreal).all(axis=0)]
Di sini, np.applymap(np.isreal)memperlihatkan apakah setiap sel dalam bingkai data adalah numerik, dan .axis(all=0)memeriksa apakah semua nilai dalam kolom adalah True dan mengembalikan serangkaian Boolean yang dapat digunakan untuk mengindeks kolom yang diinginkan.
Silakan lihat kode di bawah ini:
if(dataset.select_dtypes(include=[np.number]).shape[1] > 0):
display(dataset.select_dtypes(include=[np.number]).describe())
if(dataset.select_dtypes(include=[np.object]).shape[1] > 0):
display(dataset.select_dtypes(include=[np.object]).describe())
Dengan cara ini Anda dapat memeriksa apakah nilainya numerik seperti float dan int atau nilai srting. yang kedua jika pernyataan digunakan untuk memeriksa nilai string yang dirujuk oleh objek.
Kami dapat menyertakan dan mengecualikan tipe data sesuai kebutuhan seperti di bawah ini:
train.select_dtypes(include=None, exclude=None)
train.select_dtypes(include='number') #will include all the numeric types
Dirujuk dari Jupyter Notebook.
Untuk memilih semua tipe numerik , gunakan np.numberatau'number'
Untuk memilih string Anda harus menggunakan objectdtype tetapi perhatikan bahwa ini akan mengembalikan semua kolom dtype objek
Lihat NumPy dtype hierarchy <http://docs.scipy.org/doc/numpy/reference/arrays.scalars.html>__
Untuk memilih waktu, gunakan np.datetime64, 'datetime'atau
'datetime64'
Untuk memilih sabuk waktu, gunakan np.timedelta64, 'timedelta'atau
'timedelta64'
Untuk memilih jenis kategori Pandas, gunakan 'category'
Untuk memilih Pandas datetimetz dtypes, gunakan 'datetimetz'(baru di 0.20.0) atau "'datetime64 [ns, tz]'
dtypemenjadiobject, tetapi semua elemen menjadi numerik, dianggap sebagai numerik atau tidak. Jika tidak, ambillah jawaban Hanan, karena ini juga lebih cepat. Jika tidak, ambil punyaku.