web-dev-qa-db-fra.com

Comment obtenir des colonnes pandas.DataFrame contenant un type spécifique

J'utilise df.columns.values ​​pour créer une liste de noms de colonnes que je parcoure ensuite pour créer des graphiques, etc., mais lorsque j'ai défini cette option, j'ai ignoré les colonnes non numériques du fichier df. Maintenant, je préférerais de loin ne pas simplement supprimer ces colonnes de la df (ou une copie de celle-ci). Au lieu de cela, je voudrais trouver un moyen simple de les éliminer de la liste des noms de colonnes. 

Maintenant j'ai: 

names = df.columns.values 

ce que je voudrais faire est quelque chose qui se comporte comme: 

names = df.columns.values(column_type=float64) 

Y a-t-il un moyen astucieux de faire cela? Je suppose que je pourrais faire une copie de la df, et supprimer ces colonnes non numériques avant de faire columns.values, mais cela me semble maladroit.

Bienvenue toutes les contributions/suggestions. Merci. 

38
Charlie_M

Quelqu'un vous répondra probablement mieux que cela, mais j'ai tendance à le faire si toutes mes données numériques sont des objets int64 ou float64, vous pouvez alors créer un dict des types de données de colonne, puis utiliser les valeurs pour créer votre liste de colonnes.

Ainsi, par exemple, dans un cadre de données où j'ai des colonnes de type float64, int64 et object, vous pouvez d'abord examiner les types de données comme suit:

DF.dtypes

et si elles sont conformes à la norme selon laquelle les colonnes de données non numériques sont toutes des types object (comme elles le sont dans mes cadres de données), vous pouvez procéder comme suit pour obtenir une liste des colonnes numériques:

[key for key in dict(DF.dtypes) if dict(DF.dtypes)[key] in ['float64', 'int64']]

C'est juste une simple compréhension de liste. Rien d'extraordinaire. Encore une fois, si cela fonctionnera pour vous, cela dépendra de la façon dont vous configurez votre cadre de données ...

23
Woody Pride

dtypes est une série de pandas. Cela signifie qu'il contient les attributs d'index et de valeurs . Si vous avez seulement besoin des noms de colonne:

headers = df.dtypes.index

il retournera une liste contenant les noms de colonne de "df" dataframe.

21
Arthur Zennig

Une nouvelle fonctionnalité de 0.14.1, select_dtypes permet de sélectionner des colonnes par type de fichier en fournissant une liste de types de types à inclure ou à exclure.

Par exemple:

df = pd.DataFrame({'a': np.random.randn(1000),
                   'b': range(1000),
                   'c': ['a'] * 1000,
                   'd': pd.date_range('2000-1-1', periods=1000)})


df.select_dtypes(['float64','int64'])

Out[129]: 
            a    b
0    0.153070    0
1    0.887256    1
2   -1.456037    2
3   -1.147014    3
...
18
chrisb

Pour obtenir les noms de colonne de pandas dataframe en python3-ici, je crée un cadre de données à partir d'un fichier nomFichier.csv

>>> import pandas as pd
>>> df = pd.read_csv('fileName.csv')
>>> columnNames = list(df.head(0)) 
>>> print(columnNames)
4
Justin

Vous pouvez également essayer d’obtenir les noms des colonnes à partir du cadre de données Panda qui renvoie également le nom de la colonne dtype. Ici, je vais lire le fichier csv de https://mlearn.ics.uci.edu/databases/autos/imports-85.data mais vous avez défini un en-tête contenant des noms de colonnes.

import pandas as pd

url="https://mlearn.ics.uci.edu/databases/autos/imports-85.data"

df=pd.read_csv(url,header = None)

headers=["symboling","normalized-losses","make","fuel-type","aspiration","num-of-doors","body-style",
         "drive-wheels","engine-location","wheel-base","length","width","height","curb-weight","engine-type",
         "num-of-cylinders","engine-size","fuel-system","bore","stroke","compression-ratio","horsepower","peak-rpm"
         ,"city-mpg","highway-mpg","price"]

df.columns=headers

print df.columns
0