web-dev-qa-db-fra.com

Pandas: convertir date 'objet' en int

J'ai une base de données Pandas et j'ai besoin de convertir une colonne avec des dates en int mais, malheureusement, toutes les solutions proposées se retrouvent avec des erreurs (ci-dessous)

test_df.info()

<class 'pandas.core.frame.DataFrame'>
Data columns (total 4 columns):
Date        1505 non-null object
Avg         1505 non-null float64
TotalVol    1505 non-null float64
Ranked      1505 non-null int32
dtypes: float64(2), int32(1), object(1) 

échantillon de données:

    Date        Avg             TotalVol  Ranked
0   2014-03-29  4400.000000     0.011364    1
1   2014-03-30  1495.785714     4.309310    1
2   2014-03-31  1595.666667     0.298571    1
3   2014-04-01  1523.166667     0.270000    1
4   2014-04-02  1511.428571     0.523792    1

Je pense que j'ai tout essayé mais que rien ne fonctionne

test_df['Date'].astype(int):

L'argument TypeError: int () doit être une chaîne, un objet de type octet ou un nombre, et non pas "datetime.date".

test_df['Date']=pd.to_numeric(test_df['Date']):

TypeError: type d'objet non valide à la position 0

test_df['Date'].astype(str).astype(int):

ValueError: Littéral invalide pour int () avec base 10: '2014-03-29'

test_df['Date'].apply(pd.to_numeric, errors='coerce'):

Convertit la colonne entière en NaN

2
jabba

La raison pour laquelle test_df['Date'].astype(int) vous donne une erreur est que vos dates contiennent toujours des traits d'union " - ". Tout d'abord, supprimez-les en faisant test_df['Date'].str.replace("-",""), vous pourrez ensuite appliquer votre première méthode à la série résultante. Donc toute la solution serait:

test_df['Date'].str.replace("-","").astype(int) Notez que cela ne fonctionnera pas si votre colonne " Date " n'est pas un objet chaîne, généralement lorsque Pandas a déjà analysé votre série en tant que TimeStamp. Dans ce cas, vous pouvez utiliser:

test_df['Date'].dt.strftime("%Y%m%d").astype(int)
5
Neroksi

On dirait que vous avez besoin de pd.to_datetime().dt.strftime("%Y%m%d").

Démo:

import pandas as pd
df = pd.DataFrame({"Date": ["2014-03-29", "2014-03-30", "2014-03-31"]})
df["Date"] = pd.to_datetime(df["Date"]).dt.strftime("%Y%m%d")
print( df )

Sortie:

       Date
0  20140329
1  20140330
2  20140331
1
Rakesh

Cela devrait marcher

df['Date'] = pd.to_numeric(df.Date.str.replace('-',''))
print(df['Date'])
0    20140329
1    20140330
2    20140331
3    20140401
4    20140402
0
msolomon87