web-dev-qa-db-fra.com

Comment convertir une colonne avec dtype en tant qu'objet en chaîne dans Pandas _ Dataframe

Lorsque je lis un fichier csv dans pandas dataframe, chaque colonne est convertie en ses propres types de données. J'ai une colonne qui a été convertie en objet. Je souhaite effectuer des opérations sur les chaînes pour cette colonne, telles que le fractionnement des valeurs et la création d'une liste. Mais une telle opération n'est pas possible car son type est object. Quelqu'un peut-il me dire, s'il vous plaît, comment convertir tous les éléments d'une colonne en chaînes plutôt qu'en objets?

J'ai essayé plusieurs façons mais rien n'a fonctionné. J'ai utilisé astype, str (), to_string etc.

a=lambda x: str(x).split(',')
df['column'].apply(a)

ou

df['column'].astype(str)
67
user3546523

comme les types de données de chaînes ont une longueur variable, il est stocké par défaut en tant que type d'objet. Si vous voulez les stocker en tant que type de chaîne, vous pouvez faire quelque chose comme ceci.

df['column'] = df['column'].astype('|S80') #where the max length is set at 80 bytes,

ou bien

df['column'] = df['column'].astype('|S') # which will by default set the length to the max len it encounters
27
Siraj S.

Avez-vous essayé de l'assigner à la colonne?

df['column'] = df['column'].astype('str') 

En référence à cette question , le pandas dataframe stocke les pointeurs sur les chaînes et est donc de type 'objet'. Selon docs , vous pouvez essayer:

df['column_new'] = df['column'].str.split(',') 
17
Hypothetical Ninja

Ne pas répondre directement à la question, mais cela pourrait aider quelqu'un d'autre.

J'ai une colonne appelée Volume, ayant à la fois - (invalide/NaN) et des nombres mis en forme avec ,

df['Volume'] = df['Volume'].astype('str')
df['Volume'] = df['Volume'].str.replace(',', '')
df['Volume'] = pd.to_numeric(df['Volume'], errors='coerce')

La conversion en chaîne est obligatoire pour qu'elle s'applique à str.replace

pandas.Series.str.replace
pandas.to_numeric

10
zurfyx

Vous pouvez essayer d'utiliser df['column'].str. puis d'utiliser n'importe quelle fonction de chaîne. Pandas la documentation inclut ceux comme split

3
Koshy Thomas