Convertir des pandas.tslib.Timestamp à datetime python

j'ai un df le temps de la série. J'ai extrait les index et je veux les convertir chacun en datetime. Comment allez-vous faire cela? J'ai essayé d'utiliser pandas.to_datetime(x) mais il ne le convertit pas quand je vérifie après avoir utilisé type()

18
demandé sur user1234440 2014-09-15 19:52:31

7 réponses

Juste essayer to_datetime ()

>>> import pandas as pd
>>> t = pd.tslib.Timestamp('2016-03-03 00:00:00')
>>> type(t)
pandas.tslib.Timestamp
>>> t.to_datetime()
datetime.datetime(2016, 3, 3, 0, 0)
>>> t.to_pydatetime()
datetime.datetime(2016, 3, 3, 0, 0)

passer à datetime.date tapez

>>> t.date()
datetime.date(2016, 3, 3)

mise à jour

Merci, @ mjp,to_datetime() sera obsolète dans l'avenir, utiliser to_pydatetime() à la place!

In [4]: t.to_datetime()
/Users/qiuwei/Library/Python/2.7/lib/python/site-packages/IPython/core/interactiveshell.py:2881: FutureWarning: to_datetime is deprecated. Use self.to_pydatetime()
  exec(code_obj, self.user_global_ns, self.user_ns)
Out[4]: datetime.datetime(2016, 3, 3, 0, 0)
40
répondu GoingMyWay 2017-07-28 07:53:55

en supposant que vous essayez de convertir des objets pandas timestamp, vous pouvez simplement extraire les données pertinentes de l'horodatage:

#Create the data
data = {1: tslib.Timestamp('2013-01-03 00:00:00', tz=None), 2: tslib.Timestamp('2013-01-04 00:00:00', tz=None), 3: tslib.Timestamp('2013-01-03 00:00:00', tz=None)}

#convert to df
df = pandas.DataFrame.from_dict(data, orient = 'index')
df.columns = ['timestamp']

#generate the datetime
df['datetime'] = df['timestamp'].apply(lambda x: datetime.date(x.year,x.month,x.day))

bien sûr, si vous avez besoin de secondes, minutes et heures, vous pouvez les inclure comme arguments pour la fonction datetime.datetime.

3
répondu aikramer2 2014-11-13 00:06:09

j'ai eu le même problème, et j'ai essayé la solution de @aikramer2, pour ajouter une colonne à mon df de type " datetime.datetime', mais encore une fois j'ai eu une pandas type de données:

#libraries used -
import pandas as pd
import datetime as dt

#loading data into a pandas df, from a local file. note column [1] contains a datetime column -
savedtweets = pd.read_csv('/Users/sharon/Documents/ipython/twitter_analysis/conftwit.csv', sep='\t', 
                      names=['id', 'created_at_string', 'user.screen_name', 'text'], 
                      parse_dates={"created_at" : [1]})
print int(max(savedtweets['id'])) #535073416026816512
print type(savedtweets['created_at'][0]) # result is <class 'pandas.tslib.Timestamp'>

# add a column specifically using datetime.datetime library -
savedtweets['datetime'] = savedtweets['created_at'].apply(lambda x: dt.datetime(x.year,x.month,x.day))
print type(savedtweets['datetime'][0]) # result is <class 'pandas.tslib.Timestamp'>
savedtweets = pd.read_csv('/Users/swragg/Documents/ipython/twitter_analysis/conftwit.csv', sep='\t', 
                      names=['id', 'created_at_string', 'user.screen_name', 'text'], 
                      parse_dates={"created_at" : [1]})
print int(max(savedtweets['id'])) #535073416026816512
print type(savedtweets['created_at'][0]) # <class 'pandas.tslib.Timestamp'>
savedtweets_datetime= [dt.datetime(x.year,x.month,x.day,x.hour,x.minute,x.second) for x in savedtweets['created_at']]
print savedtweets_datetime[0] # 2014-11-19 14:13:38
print savedtweets['created_at'][0] # 2014-11-19 14:13:38
print type(dt.datetime(2014,3,5,2,4)) # <type 'datetime.datetime'>
print type(savedtweets['created_at'][0].year) # <type 'int'>
print type(savedtweets_datetime) # <type 'list'>
3
répondu sharon 2014-11-20 19:22:48

Juste une mise à jour à la question, j'ai essayé la plupart des upvoted réponse, et il me donne cet avertissement

usr/local/lib / python3.5 / dist-packages/IPython/core / interactiveshell.py: 2910: FutureWarning: to_datetime est déprécié. Utilise-toi.to_pydatetime() exec(code_obj, de soi.user_global_ns, de soi.user_ns)

Et me suggérer d'utiliser to_pydatetime ()

Par exemple

sample = Timestamp('2018-05-02 10:08:54.774000')

sample.to_datetime() sera de retour datetime.datetime(2018, 4, 30, 10, 8, 54, 774000)

2
répondu Morris wong 2018-05-03 04:02:15
import time
time.strftime("%H:%M",  time.strptime(str(x), "%Y-%m-%d %H:%M:%S"))

Note: x devrait être pandas.tslib.Timestamp (comme il l'est dans la question)

1
répondu Kostyantyn 2015-03-30 15:24:10

cela fonctionne pour moi, pour créer la date pour insert dans MySQL, s'il vous plaît essayer:

pandas_tslib = pandas_tslib.to_pydatetime()
pandas_tslib = "'" + pandas_tslib.strftime('%Y-%m-%d') + "'"
1
répondu giovannivl 2017-04-27 05:44:22

Vous pouvez convertir un Timestamp en un objet datetime Python avec to_pydatetime (), mais il semble que lorsqu'elle est appliquée à une colonne entière que la conversion est contrecarrée:

>>> ts = pd.tslib.Timestamp.now()
>>> type(ts)
<class 'pandas._libs.tslibs.timestamps.Timestamp'>
>>> type(ts.to_pydatetime())
<class 'datetime.datetime'>
>>> df = pd.DataFrame({"now": [datetime.datetime.utcnow()] * 10})
>>> type(df['now'].iloc[0])
<class 'pandas._libs.tslibs.timestamps.Timestamp'>
>>> df['now2'] = df['now'].apply(lambda dt: dt.to_pydatetime())
>>> type(df['now2'].iloc[0])
<class 'pandas._libs.tslibs.timestamps.Timestamp'>

vous ne savez Pas quoi faire de cela. (Il y a des situations où L'objet Timestamp de Pandas n'est pas un remplacement parfait pour l'objet datetime de Python, et vous voulez la vraie chose.)

0
répondu smontanaro 2018-07-19 11:48:31