1
votes

Supprimer la valeur décimale de l'année dans un bloc de données

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


0 commentaires

4 Réponses :


1
votes

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


0 commentaires

0
votes

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


0 commentaires

0
votes

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


0 commentaires

0
votes

Nous pouvons simplement utiliser datetime

import datetime
df1['year_built'] = pd.to_datetime(df1['year_built'])
print(df1)


0 commentaires