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()
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)
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.
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'>
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)
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)
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') + "'"
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.)