J'ai actuellement une colonne 'Année de construction' dans un df décrivant la date de construction des bâtiments, lorsque j'ai importé le fichier csv, les années ont toutes des décimales après elles: 1920.0, 1985.0. Comment puis-je les changer dans un format datetime ou simplement supprimer la décimale?
array(['1970-01-01T00:00:00.000001920', '1970-01-01T00:00:00.000001985', 'NaT', '1970-01-01T00:00:00.000001930', '1970-01-01T00:00:00.000001986', '1970-01-01T00:00:00.000001987', '1970-01-01T00:00:00.000001988', '1970-01-01T00:00:00.000001990',
df1['Year Built'] = pd.to_datetime(df1['Year Built']) # check df1['Year Built'].unique()
Quand j'ai essayé d'utiliser datetime ...
0 1920.0 1 1985.0 2 NaN 3 1930.0 4 1985.0 Name: Year Built, dtype: float64
df1['Year Built'].head()
4 Réponses :
Ajouter un paramètre format
par %Y
pour correspondance YYYY
et aussi des errors='coerce'
pour convertir les valeurs ne correspondent pas aux valeurs misisng NaT
:
df1['Year Built'] = pd.to_datetime(df1['Year Built'], format='%Y', errors='coerce') print (df1) Year Built 0 1920-01-01 1 1985-01-01 2 NaT 3 1930-01-01 4 1985-01-01
vous pouvez simplement les changer de float en int (et plus tard string si vous ne les traiterez pas comme des nombres)
df1['Year Built'] = df1['Year Built'].astype(int)
et voici le lien pour plus de détails
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.astype.html
Semblable à la réponse de Lion Nadej Ahmed, vous pouvez utiliser le paramètre dtype lorsque vous lisez les données, en spécifiant int pour éviter que l'année ne devienne un flottant.
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
Nous pouvons simplement utiliser datetime
import datetime df1['year_built'] = pd.to_datetime(df1['year_built']) print(df1)