J'ai des colonnes de dataframe dont je souhaite supprimer les 3 derniers caractères de la chaîne: remplacez «1996-09-27 00: 00: 00 + 10» par «1996-09-27 00:00:00»
Je suis capable d'utiliser df['col'][0][:-3]
pour une seule chaîne mais TypeError: 'float' object is not subscriptable
reçu TypeError: 'float' object is not subscriptable
de df['col'] = df['col'].apply(lambda x: x[:-3])
3 Réponses :
Si la colonne contient toutes des chaînes, vous pouvez faire:
df = pd.DataFrame({'col':['1996-09-27 00:00:00+10','1996-09-27 0000:00+11']}) df['col'].replace("[+][0-9]*","",regex=True) 0 1996-09-27 00:00:00 1 1996-09-27 00:00:00
Mon expression régulière n'est pas très bonne, mais la partie [+] recherche un modèle qui est un signe "+" suivi de 0 ou plusieurs chiffres.
Je suppose que la raison est que la colonne col
comprend à la fois des valeurs flottantes et des valeurs de chaîne.
Par exemple, si vous avez le dataframe ci-dessous:
df['col'] = df['col'].astype(str).apply(lambda l: l[:-3])
La suppression des 3 derniers caractères déclenchera une exception:
TypeError: 'float' object is not subscriptable
La solution consiste à convertir toutes les valeurs en chaîne avant d'appliquer les manipulations de chaîne.
df = pd.DataFrame({'col':['1996-09-27 00:00:00+10','1996-09-27 0000:00+11', 1000.5]})
Je lance exactement le même code, mais cela fonctionne sans erreur:
df = pd.DataFrame({'col':['1996-09-27 00:00:00+10','1996-09-27 0000:00+11']}) df['col'] = df['col'].apply(lambda x: x[:-3])
Sortie df ['col']:
0 1996-09-27 00:00:00
1 1996-09-27 0000: 00
Ma conjecture est: peut-être que le type de df['col']
est float au lieu de string? Vous pouvez le vérifier avec df['col'].dtypes
.