web-dev-qa-db-fra.com

Convertir pandas dataframe en numpy array - quelle approche préférer?

J'ai besoin de convertir une grande trame de données en un tableau numpy. Préserver uniquement les valeurs et les types numériques. Je sais qu'il existe des moyens bien documentés de le faire.

Alors, lequel préférez-vous?

df.values
df._as_matrix()
pd.to_numeric(df)
... others ...

Facteur de décision:

  • efficacité

  • fonctionnement en toute sécurité sur nan, np.nans et autres valeurs inattendues possibles

  • numériquement stable

9
00__00__00

Les fonctions que vous mentionnez ont des objectifs différents.

  1. pd.to_numeric : utilisez-le pour convertir les types dans votre trame de données si vos données ne sont pas actuellement stockées sous forme numérique ou si vous souhaitez convertir un type optimal via downcast='float' ou downcast='integer'.

  2. pd.DataFrame.to_numpy() (v0.24 +) ou pd.DataFrame.values : utilisez-le pour récupérer numpy la représentation du tableau de votre trame de données.

  3. pd.DataFrame.as_matrix : Ne l'utilisez pas. Il est inclus uniquement pour une compatibilité descendante.

12
jpp

Sous le capot, un pandas.DataFrame n'est pas beaucoup plus qu'un numpy.array. Le moyen le plus simple et peut-être le plus rapide consiste à utiliser pandas.DataFrame.values

DataFrame.values

Représentation numpy de NDFrame

Remarques

Le dtype sera un dtype à dénominateur commun inférieur (conversion ascendante implicite); c'est-à-dire que si les dtypes (même de types numériques) sont mélangés, celui qui accueille tout sera choisi. Utilisez-le avec précaution si vous ne traitez pas avec les blocs.

par exemple. Si les dtypes sont float16 et float32, dtype sera converti en float32. Si les dtypes sont int32 et uint8, dtype sera converti en int32. Par convention numpy.find_common_type, mélanger int64 et uint64 entraînera un dtype flot64.

6
ascripter