2
votes

Comment obtenir des colonnes avec des valeurs numériques et des valeurs catégorielles dans Pandas sous forme de listes séparées?

Voici mon code:

<class 'pandas.core.series.Series'>
First      True
Second    False
Third      True
Fourth    False
dtype: bool

Le résultat est:

df = pd.DataFrame({'First':[1,2,3,4],'Second':[1,2,3,'string'],'Third':[1,2,3,4],'Fourth':['string','lava','cake','Volcano']})
columns = df.applymap(np.isreal).all()
print(type(columns))
print(columns)
True_columns = []
False_columns = []

Je dois enregistrer toutes les colonnes avec TRUE (First, Third) dans la liste True_columns et tous les FALSE (Second, Fourth) dans la liste False_columns. J'apprends les pandas. Quelqu'un pourrait-il m'aider à répondre à cette exigence?

Merci d'avance.


0 commentaires

4 Réponses :


2
votes

Filtrer par indexation booléenne code> et pour False_columns inverser le masque booléen par ~:

True_columns = df.select_dtypes(np.number).columns.tolist()
print (True_columns)
['First', 'Third']

False_columns = df.select_dtypes('object').columns.tolist()
print (False_columns)
['Second', 'Fourth']

Or:

True_columns = columns[columns].index.tolist()
False_columns = columns[~columns].index.tolist()

Or:

True_columns = columns.index[columns].tolist()
False_columns = columns.index[~columns].tolist()

Une autre solution est d'utiliser DataFrame.select_dtypes :

True_columns  = df.columns[columns].tolist()
print (True_columns)
['First', 'Third']

False_columns = df.columns[~columns].tolist()
print (False_columns)
['Second', 'Fourth']


0 commentaires

1
votes

Essayez ceci:

True_columns = columns[columns].index.tolist()
False_columns = columns[~columns].index.tolist()


0 commentaires

0
votes
numeric_cols = [column for column in df.columns if df[column].dtype != 'object']
string_cols = [column for column in df.columns if df[column].dtype == 'object']
This will give you list of columns with numeric and non-numeric dtypes.

0 commentaires

0
votes

Merci à tous pour les commentaires. J'ai essayé ci-dessous et cela fonctionne comme prévu.

df = pd.DataFrame({'First':[1,2,3,4],'Second':[1,2,3,'string'],'Third':[1,2,3,4],'Fourth':['string','lava','cake','Volcano']})
columns = df.applymap(np.isreal).all()
True_columns = df.columns[columns].tolist()
False_columns = df.columns[~columns].tolist()
print(True_columns,False_columns)


0 commentaires