Python pandas convertir datetime pour timestamp efficacement par le biais d'dt accesseur

J'ai un dataframe avec quelques (centaines) de millions de lignes. Et je veux convertir datetime pour timestamp efficacement. Comment puis-je le faire?

Mon exemple df:

df = pd.DataFrame(index=pd.DatetimeIndex(start=dt.datetime(2016,1,1,0,0,1),
    end=dt.datetime(2016,1,2,0,0,1), freq='H'))\
    .reset_index().rename(columns={'index':'datetime'})

df.head()

             datetime
0 2016-01-01 00:00:01
1 2016-01-01 01:00:01
2 2016-01-01 02:00:01
3 2016-01-01 03:00:01
4 2016-01-01 04:00:01

Maintenant je convertir datetime pour l'horodatage, valeur par valeur, avec .apply() mais prend un temps très long (quelques heures) si j'ai quelques (centaines) de millions de lignes:

df['ts'] = df[['datetime']].apply(lambda x: x[0].timestamp(), axis=1).astype(int)

df.head()

             datetime          ts
0 2016-01-01 00:00:01  1451602801
1 2016-01-01 01:00:01  1451606401
2 2016-01-01 02:00:01  1451610001
3 2016-01-01 03:00:01  1451613601
4 2016-01-01 04:00:01  1451617201

Le résultat ci-dessus est ce que je veux.

Si j'essaie d'utiliser le .dt accesseur de pandas.Series puis je reçois un message d'erreur:

df['ts'] = df['datetime'].dt.timestamp

AttributeError: 'DatetimeProperties' objet n'a pas d'attribut
'timestamp'

Si je tente de créer, par exemple. les parties de la date de datetimes avec le .dt accesseur ensuite, il est beaucoup plus rapide ensuite à l'aide de .apply():

df['date'] = df['datetime'].dt.date

df.head()

             datetime          ts        date
0 2016-01-01 00:00:01  1451602801  2016-01-01
1 2016-01-01 01:00:01  1451606401  2016-01-01
2 2016-01-01 02:00:01  1451610001  2016-01-01
3 2016-01-01 03:00:01  1451613601  2016-01-01
4 2016-01-01 04:00:01  1451617201  2016-01-01

Je veux quelque chose de similaire avec les horodatages...

Mais je ne comprends pas vraiment la documentation officielle: elle parle de "La conversion d'Horodateurs" mais je ne vois pas du tout horodatage là; simplement, il parle de la conversion de type datetime avec pd.to_datetime() mais pas de timestamp...

pandas.Timestamp constructeur aussi ne fonctionne pas (de retour avec l'erreur ci-dessous):

df['ts2'] = pd.Timestamp(df['datetime'])

TypeError: Impossible de convertir les données d'entrée pour l'Horodatage

pandas.De la série.to_timestamp aussi fait quelque chose de totalement différent que je veux:

df['ts3'] = df['datetime'].to_timestamp

df.head()

             datetime          ts                                                ts3
0 2016-01-01 00:00:01  1451602801  <bound method Series.to_timestamp of 0    2016...
1 2016-01-01 01:00:01  1451606401  <bound method Series.to_timestamp of 0    2016...
2 2016-01-01 02:00:01  1451610001  <bound method Series.to_timestamp of 0    2016...
3 2016-01-01 03:00:01  1451613601  <bound method Series.to_timestamp of 0    2016...
4 2016-01-01 04:00:01  1451617201  <bound method Series.to_timestamp of 0    2016...

Merci!!!!!

OriginalL'auteur ragesz | 2016-11-30