Należy określić, czy dana kolumna, która dtypejest object, 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.
FooBar
Co się stanie, jeśli po prostu wypróbujesz kolumny df.describe (). Następnie przypisz go do zmiennej.
coldy
Odpowiedzi:
146
Możesz użyć select_dtypesmetody DataFrame. Obejmuje dwa parametry obejmują i wyklucza. Więc isNumeric wyglądałoby tak:
Możesz użyć df.select_dtypes (include = [np.number]), jeśli nie musisz określać listy „
numerycznej
23
Opierając się na wskazówce w poprzednim komentarzu (+1), możesz po prostu użyć list(df.select_dtypes(include=[np.number]).columns.values) do uzyskania listy nazw kolumn liczbowych
user799188
76
Możesz użyć nieudokumentowanej funkcji _get_numeric_data()do filtrowania tylko kolumn liczbowych:
df._get_numeric_data()
Przykład:
In[32]: dataOut[32]:
A B01 s12 s23 s34 sIn[33]: data._get_numeric_data()Out[33]:
A01122334
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 .
Nie, to nie jest nigdzie udokumentowane. Implementacja jest tutaj , jednak jak wspomniał @ijoseph, byłbym ostrożny przy używaniu metod zaczynających się od podkreślenia, ponieważ są one niewiele więcej niż szczegółami implementacji. Użyj dosłownie KAŻDEJ innej odpowiedzi poza tym.
cs95
Dokładnie. Jako najlepszą praktykę staram się używać i konwertować na jak najwięcej metod numpy. Wynika to z dynamizmu pand. Interfejs API często się zmienia. W przypadku metod nieudokumentowanych jest to po prostu lekkomyślne, bez względu na to, jak przydatne jest.
mik
69
Prosta jednowierszowa odpowiedź, aby utworzyć nową ramkę danych z tylko kolumnami liczbowymi:
Jeśli chcesz tylko jeden typ, nie musisz przechowywać go na liście. Nie musisz też określać include=. select_dtypes(np.number)
BallpointBen
Jeśli kolumny zawierają dane liczbowe, ale mają również wartość Brak, typ dtype może mieć wartość „obiekt”. To zmusi kolumny do wartości liczbowych:df.fillna(value=0, inplace=True)
oto marketing_trainmó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:
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)
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.
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.
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.Odpowiedzi:
Możesz użyć
select_dtypes
metody DataFrame. Obejmuje dwa parametry obejmują i wyklucza. Więc isNumeric wyglądałoby tak:źródło
list(df.select_dtypes(include=[np.number]).columns.values)
do uzyskania listy nazw kolumn liczbowychMożesz użyć nieudokumentowanej funkcji
_get_numeric_data()
do filtrowania tylko kolumn liczbowych:Przykład:
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 .
źródło
Prosta jednowierszowa odpowiedź, aby utworzyć nową ramkę danych z tylko kolumnami liczbowymi:
Jeśli chcesz nazwy kolumn numerycznych:
Kompletny kod:
źródło
df.select_dtypes(include=['int64']).columns.tolist()
include=
.select_dtypes(np.number)
df.fillna(value=0, inplace=True)
źródło
datetime
ale nie są typami liczbowymiProsta jedna linijka:
źródło
Poniższe kody spowodują zwrócenie listy nazw kolumn liczbowych zestawu danych.
oto
marketing_train
mój zestaw danych iselect_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:Dzięki
źródło
To kolejny prosty kod do znajdowania kolumny numerycznej w ramce danych pandy,
źródło
źródło
Dostosowując tę odpowiedź , możesz to zrobić
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.źródło
Zobacz poniższy kod:
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.
źródło
Możemy uwzględniać i wykluczać typy danych zgodnie z poniższym wymaganiem:
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 dtypeZobacz
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]'źródło