0
votes

TypeError: l'objet 'float' n'est pas en indice lors de la suppression des 3 derniers caractères de la chaîne

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])


0 commentaires

3 Réponses :


0
votes

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.


0 commentaires

0
votes

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]})


0 commentaires

0
votes

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 .


0 commentaires