Powiedzmy, że df
jest to DataFrame pandy. Chciałbym znaleźć wszystkie kolumny typu liczbowego. Coś jak:
isNumeric = is_numeric(df)
Powiedzmy, że df
jest to DataFrame pandy. Chciałbym znaleźć wszystkie kolumny typu liczbowego. Coś jak:
isNumeric = is_numeric(df)
Odpowiedzi:
Możesz użyć select_dtypes
metody DataFrame. Obejmuje dwa parametry obejmują i wyklucza. Więc isNumeric wyglądałoby tak:
numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']
newdf = df.select_dtypes(include=numerics)
list(df.select_dtypes(include=[np.number]).columns.values)
do uzyskania listy nazw kolumn liczbowych
Możesz użyć nieudokumentowanej funkcji _get_numeric_data()
do filtrowania tylko kolumn liczbowych:
df._get_numeric_data()
Przykład:
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
Należy zauważyć, że jest to „metoda prywatna” (tj. Szczegół implementacji) i może w przyszłości ulec zmianie lub całkowitemu usunięciu. Używaj ostrożnie .
Prosta jednowierszowa odpowiedź, aby utworzyć nową ramkę danych z tylko kolumnami liczbowymi:
df.select_dtypes(include=np.number)
Jeśli chcesz nazwy kolumn numerycznych:
df.select_dtypes(include=np.number).columns.tolist()
Kompletny kod:
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)
df.select_dtypes(exclude=['object'])
datetime
ale nie są typami liczbowymi
Prosta jedna linijka:
df.select_dtypes('number').columns
Poniższe kody spowodują zwrócenie listy nazw kolumn liczbowych zestawu danych.
cnames=list(marketing_train.select_dtypes(exclude=['object']).columns)
oto marketing_train
mój zestaw danych i select_dtypes()
służy do wybierania typów danych za pomocą wykluczania i dołączania argumentów i kolumn służy do pobierania nazwy kolumny zestawu danych wyjście powyższego kodu będzie następujące:
['custAge',
'campaign',
'pdays',
'previous',
'emp.var.rate',
'cons.price.idx',
'cons.conf.idx',
'euribor3m',
'nr.employed',
'pmonths',
'pastEmail']
Dzięki
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)
Dostosowując tę odpowiedź , możesz to zrobić
df.ix[:,df.applymap(np.isreal).all(axis=0)]
Tutaj np.applymap(np.isreal)
pokazuje, czy każda komórka w ramce danych jest numeryczna i .axis(all=0)
sprawdza, czy wszystkie wartości w kolumnie mają wartość Prawda i zwraca serię wartości logicznych, których można użyć do indeksowania żądanych kolumn.
Zobacz poniższy kod:
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())
W ten sposób możesz sprawdzić, czy wartości są numeryczne, takie jak float i int lub srting. druga instrukcja if służy do sprawdzania wartości łańcuchowych, do których odwołuje się obiekt.
Możemy uwzględniać i wykluczać typy danych zgodnie z poniższym wymaganiem:
train.select_dtypes(include=None, exclude=None)
train.select_dtypes(include='number') #will include all the numeric types
Skierowany z Jupyter Notebook.
Aby wybrać wszystkie typy liczbowe , użyj np.number
lub'number'
Aby wybrać łańcuchy, musisz użyć object
dtype, ale zwróć uwagę, że zwróci to wszystkie kolumny obiektu dtype
Zobacz NumPy dtype hierarchy <http://docs.scipy.org/doc/numpy/reference/arrays.scalars.html>
__
Aby wybrać datetimes, stosowanie np.datetime64
, 'datetime'
lub
'datetime64'
Aby wybrać timedeltas, stosowanie np.timedelta64
, 'timedelta'
lub
'timedelta64'
Aby wybrać dtypy jakościowe Pandas, użyj 'category'
Aby wybrać typy datetimetz Pandas, użyj 'datetimetz'
(nowość w 0.20.0) lub `` 'datetime64 [ns, tz]'
dtype
jestobject
, ale wszystkie elementy są numeryczne, liczy się jako numeryczny czy nie. Jeśli nie, weź odpowiedź Hanan, ponieważ jest ona również szybsza. W przeciwnym razie weź moje.