Je me rends compte que c'est une vieille question, mais comme c'est la première chose qui arrive pour la conversion des chaînes df, je pense qu'elle doit être à jour.
Si vous voulez que le dtype réel soit une chaîne de caractères (plutôt qu'un objet) et/ou si vous devez gérer la conversion de date dans votre df et/ou si vous avez NaN/None dans votre df. Aucun des éléments ci-dessus ne fonctionnera .
que vous devriez utiliser :
df.astype('string')
Vous pouvez comparer les résultats sur ce df :
import pandas as pd
import numpy as np
from datetime import datetime
# Example dataframe
min_index = datetime(2050, 5, 2, 0, 0, 0)
max_index = datetime(2050, 5, 3, 23, 59, 0)
df = pd.DataFrame(data=pd.date_range(start=min_index, end=max_index, freq = "H"), columns=["datetime"])
df["hours"] = df["datetime"].dt.hour
df["day_name"] = df["datetime"].dt.strftime("%A")
df["numeric_cat"] = [np.random.choice([0,1,2]) for a in range(df.shape[0])]
# Add missing values:
df = df.mask(np.random.random(df.shape) < 0.1)
# str
df1 = df.astype(str) #same pb with apply(str)
df1.isnull().sum().sum() # return 0 which is wrong
df1.info() #gives you a dtype object
# string
df2 = df.astype('string')
df2.isnull().sum().sum() # return the correct nb of missing value
df2.info() #gives you a dtype string