Maison >développement back-end >Tutoriel Python >Pourquoi une colonne Pandas DataFrame avec des chaînes affiche-t-elle « objet dtype » même après la conversion en chaîne ?

Pourquoi une colonne Pandas DataFrame avec des chaînes affiche-t-elle « objet dtype » même après la conversion en chaîne ?

DDD
DDDoriginal
2024-10-26 07:24:02638parcourir

Why does a Pandas DataFrame column with strings show

Chaînes dans un DataFrame, mais le type est un objet

Certains utilisateurs ont rencontré un DataFrame Pandas où certaines colonnes affichent un "objet dtype", même si chaque élément de ces colonnes est une chaîne, même après une conversion explicite en chaîne. Pour comprendre ce comportement, il est nécessaire d'approfondir la nature des types de données dans Pandas et NumPy.

NumPy, la bibliothèque sous-jacente de Pandas, caractérise les types de données comme int64, float64 et object. Le type "objet" signifie que les éléments d'un tableau NumPy ne sont pas d'une taille uniforme et fixe en octets, comme c'est le cas pour les entiers ou les flottants.

Pour les chaînes, leurs longueurs varient, rendant le stockage direct de chaîne d'octets dans un tableau peu pratique. Au lieu de cela, Pandas utilise un « tableau d'objets » qui stocke des pointeurs vers des objets chaîne. Cette approche explique pourquoi le dtype est un objet pour les colonnes contenant des chaînes.

Considérons l'exemple suivant :

import numpy as np
import pandas as pd

# Create a NumPy array of integers
int_array = np.array([1, 2, 3, 4], dtype=np.int64)

# Create a NumPy array of strings
object_array = np.array(['a', 'b', 'c', 'd'], dtype=np.object)

# Convert the object array to pandas DataFrame
df = pd.DataFrame({'INTS': int_array, 'STRINGS': object_array})

# Check the data types
print(df.dtypes)

# Print the lengths of the first item in each column
print(len(df['INTS'].iat[0]))
print(len(df['STRINGS'].iat[0]))

La sortie sera :

INTS         int64
STRINGS      object
dtype: object
1
1

Comme vous pouvez voyez, la colonne "INTS" a un type de int64, car tous ses éléments sont des entiers de 8 octets. La colonne "STRINGS" a un type d'objet car ses éléments sont des pointeurs vers des objets chaîne. La longueur de chaque chaîne est différente, comme en témoigne le résultat.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn