Comment extraire les 5ème et 6ème caractères de la chaîne d'une colonne en utilisant loc ou iloc et créer une nouvelle colonne?
Mon bloc de données:
print (df): p>
index effective date pp 0 2019-12 12 2 2019-13 13 15 2019-10 10 20 2019-09 09 23 2018-26 26
Ce qui suit fonctionne mais il me donne la copie d'un message de tranche:
df['pp'] = df['effective date'].str[5:7]
Une valeur essaie d'être définie sur une copie d'une tranche d'un DataFrame. Essayez d'utiliser .loc [row_indexer, col_indexer] = value à la place
Consultez les mises en garde dans la documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy p >
Le résultat attendu est le suivant sans avertissement:
print (df):
index effective date 0 2019-12 2 2019-13 15 2019-10 20 2019-09 23 2018-26
J'ai parcouru la documentation recommandée mais je peux ' t trouver quelque chose qui fait vraiment le travail. Toute aide est appréciée.
-Dave
4 Réponses :
lors de l'utilisation de df ['pp'] = df ['effective date']. str [5: 7], je ne reçois aucun avertissement peut être votre besoin de mettre à jour votre versio python. en utilisant le package datetime, vous pouvez créer une nouvelle colonne comme jour
df ['effective date'] = pd.to_datetime (df.effective date, format = '% Y-% d') pour i in (df):
i['day']= i.effective date.dt.day i['year']=i.effective date.dt.hour
df.head ()
cela devrait être un processus long mais pendant que nous prétraitons les valeurs de date, cela donnera des résultats précis
Peut-être essayer d'utiliser la fonction slice?
df['pp'] = df['effective date'].str.slice(5,7)
De plus, j'ai essayé votre méthode et je n'ai pas reçu d'avertissement.
Il semble que vous ayez juste besoin de str.split("-")
effective date pp 0 2019-12 12 1 2019-13 13 2 2019-10 10 3 2019-09 09 4 2018-26 26
ou
df['pp'] = pd.to_datetime(df['effective date'], format="%Y-%d").dt.day
df = pd.DataFrame({"effective date": ["2019-12", "2019-13", "2019-10", "2019-09", "2018-26"]})
df['pp'] = df['effective date'].str.split("-").str[1]
print(df)
Si vous souhaitez obtenir une partie des données après '-', mieux vaut utiliser la fonction de fractionnement
df['pp'] = df['effective date'].str.split('-').str[0]
Pour les données antérieures à '-'
df['pp'] = df['effective date'].str.split('-').str[1]
p>
Essayez
df.loc [:, 'pp'] = df ['effective date']. Str [5: 7]Je n'obtiens aucune erreur lorsque j'exécute le code comme vous l'avez
ne pouvez-vous pas simplement diviser les données par «-»?
@pissall, a essayé votre suggestion et cela me donne le message d'erreur deux fois.
@ SH-SF Je me demande maintenant si cela a à voir avec ma version. J'utilise 3.6.5. L'erreur est renvoyée dans le bloc-notes ipython.
@Dave Premièrement, ce n'est pas une erreur. C'est un avertissement que vous pouvez choisir d'ignorer. Essayez
df.loc ["pp"] = df ['effective date']. Apply (lambda x: x.split ("-") [- 1])