如何将时间戳更改为python datetime对象?

如何将时间戳更改为python datetime对象?,python,pandas,datetime,timestamp,pytz,Python,Pandas,Datetime,Timestamp,Pytz,我正在寻找一种将pandas时间戳更改为python datetime对象的方法,但失败了。我过去常使用_pydatetime() 下面是我的代码和注释: import pandas import datetime import pytz forced_UTC = pytz.timezone("Europe/London").localize(datetime.datetime(2019, 1, 30, 9, 5)).tzinfo forced_BST = pytz.timezone("Eur

我正在寻找一种将pandas时间戳更改为python datetime对象的方法,但失败了。我过去常使用_pydatetime()

下面是我的代码和注释:

import pandas
import datetime
import pytz

forced_UTC = pytz.timezone("Europe/London").localize(datetime.datetime(2019, 1, 30, 9, 5)).tzinfo
forced_BST = pytz.timezone("Europe/London").localize(datetime.datetime(2019, 4, 27, 9, 5)).tzinfo
#print (forced_UTC, forced_BST)

# Create dataframe and check the value of the first element in the column.
my_df = pandas.DataFrame({"my_column": ["2019-04-01 00:15:00", "2019-02-23 13:00:00", "2019-02-23 14:00:00"]})
first_date = my_df["my_column"].iloc[0]
print (first_date, type(first_date)) # 2019-04-01 00:15:00 <class 'str'>

# Change every element in the column from string to datetime object.
my_df["my_column"] = [datetime.datetime.strptime(element, "%Y-%m-%d %H:%M:%S").replace(tzinfo=forced_UTC) for element in my_df["my_column"]]
first_date = my_df["my_column"].iloc[0]
print (first_date, type(first_date)) # <class 'pandas._libs.tslibs.timestamps.Timestamp'>
# Didn't work, thought it would make them python datetime objects.

# Try creating a new list and replacing the column.
list_to_replace = [element.to_pydatetime() for element in my_df["my_column"]] # make all timestamps datetimes
print (list_to_replace[0],type(list_to_replace[0])) # 2019-04-01 01:15:00+01:00 <class 'datetime.datetime'>
my_df["my_column"] = [element for element in list_to_replace]
first_date = my_df["my_column"].iloc[0] 
print (first_date, type(first_date))# 2019-04-01 01:15:00+01:00 <class pandas._libs.tslibs.timestamps.Timestamp'>
# Didn't work.

# Use to_pydatetime() doesn't work either
print (first_date.to_pydatetime(), type(first_date)) # 2019-04-01 01:15:00+01:00 <class 'pandas._libs.tslibs.timestamps.Timestamp'>

# Using to_pydatetime() like this works!?!?!?!
first_date = my_df["my_column"].iloc[0].to_pydatetime()
print (first_date, type(first_date)) # 2019-04-01 01:15:00+01:00 <class 'datetime.datetime'>

# print (datetime.datetime.strftime(first_date, "%H"))
# print (datetime.datetime(2019, 4, 1, 0, 15, tzinfo=forced_BST) > first_date)
导入熊猫
导入日期时间
进口皮茨
强制UTC=pytz.时区(“欧洲/伦敦”).本地化(datetime.datetime(2019,1,30,9,5)).tzinfo
强制时间=pytz.时区(“欧洲/伦敦”).本地化(datetime.datetime(2019,4,27,9,5)).tzinfo
#打印(强制UTC、强制BST)
#创建dataframe并检查列中第一个元素的值。
my_df=pandas.DataFrame({“my_列”:[“2019-04-01 00:15:00”,“2019-02-23 13:00:00”,“2019-02-23 14:00:00”])
first_date=my_df[“my_column”]。iloc[0]
打印(首次日期,键入(首次日期))35; 2019-04-01 00:15:00
#将列中的每个元素从string更改为datetime对象。
my_df[“my_column”]=[datetime.datetime.StrTime(元素,“%Y-%m-%d%H:%m:%S”)。替换my_df[“my_column”]中元素的(tzinfo=forced_UTC)
first_date=my_df[“my_column”]。iloc[0]
打印(第一天,键入(第一天))#
#不起作用,认为这会使它们成为python datetime对象。
#尝试创建新列表并替换列。
list_to_replace=[element.to_pydatetime(),用于my_df[“my_column”]]中的元素#生成所有时间戳datetime
打印(列表到替换[0],键入(列表到替换[0]))#2019-04-01 01:15:00+01:00
my_df[“my_column”]=[列表中元素的元素替换]
first_date=my_df[“my_column”]。iloc[0]

打印(第一个日期,键入(第一个日期))2019-04-01 01:15:00+01:00它可以工作,但您打印的是
类型
,而没有修改类型。
在这里,您实际上正在打印熊猫日期(
first\u date
)和熊猫类型(
type(first\u date)

和这里,您也是<>强>重写<强> > <代码>第一个日期>代码>变量,用Python日期,(<代码> FieldStase= FrasyDeal.ToPyDATDATIMEMER()/代码>)这就是为什么您认为它只工作的原因。所以现在

first\u date
将是一个python日期,因此
type(first\u date)
将返回您期望的结果

# Using to_pydatetime() like this works!?!?!?!
first_date = my_df["my_column"].iloc[0].to_pydatetime()
print (first_date, type(first_date)) # 2019-04-01 01:15:00+01:00 <class 'datetime.datetime'>
#像这样使用to_pydatetime()很有效!?!?!?!
first_date=my_df[“my_column”].iloc[0]。to_pydatetime()
打印(首次日期,键入(首次日期))35; 2019-04-01 01:15:00+01:00

它可以工作,但是您在打印
类型时没有修改类型。
在这里,您实际上正在打印熊猫日期(
first\u date
)和熊猫类型(
type(first\u date)

和这里,您也是<>强>重写<强> > <代码>第一个日期>代码>变量,用Python日期,(<代码> FieldStase= FrasyDeal.ToPyDATDATIMEMER()/代码>)这就是为什么您认为它只工作的原因。所以现在

first\u date
将是一个python日期,因此
type(first\u date)
将返回您期望的结果

# Using to_pydatetime() like this works!?!?!?!
first_date = my_df["my_column"].iloc[0].to_pydatetime()
print (first_date, type(first_date)) # 2019-04-01 01:15:00+01:00 <class 'datetime.datetime'>
#像这样使用to_pydatetime()很有效!?!?!?!
first_date=my_df[“my_column”].iloc[0]。to_pydatetime()
打印(首次日期,键入(首次日期))35; 2019-04-01 01:15:00+01:00

我发现这些评论很难理解。我想他们会说,当你调用
到_pydatetime()
时,你得到了你想要的,所以我不清楚你在问什么。当我为1个元素调用函数时,它是有效的,但当我为所有元素调用函数并尝试替换数据框的列时,它失败了。我发现注释很难理解。我想他们会说,当你调用
到_pydatetime()
时,你得到了你想要的,所以我不清楚你在问什么。当我为1个元素调用函数时,它是有效的,但当我为所有元素调用函数并尝试替换数据帧的列时,它失败了。嘿,我得到了你的第二条和第三条评论,但我没有得到第一条关于修改类型的评论。你能进一步解释一下吗
list\u to\u replace
只有python datetime对象。“那么,我把它们放到专栏里应该行得通吧?”列夫编辑,我希望现在能澄清这一点。你真的走对了嘿,我收到了你的第二条和第三条评论,但是我没有收到第一条关于修改类型的评论。你能进一步解释一下吗
list\u to\u replace
只有python datetime对象。“那么,我把它们放到专栏里应该行得通吧?”列夫编辑,我希望现在能澄清这一点。你确实走在正确的道路上
# Using to_pydatetime() like this works!?!?!?!
first_date = my_df["my_column"].iloc[0].to_pydatetime()
print (first_date, type(first_date)) # 2019-04-01 01:15:00+01:00 <class 'datetime.datetime'>