Pandas 将时间戳列转换为日期时间
Posted
技术标签:
【中文标题】Pandas 将时间戳列转换为日期时间【英文标题】:Pandas Convert Timestamp Column to Datetime 【发布时间】:2016-10-05 06:43:43 【问题描述】:鉴于以下数据框和必要的争论:
import pandas as pd
df=pd.DataFrame('A':['a','b','c'],
'dates':['2015-08-31 00:00:00','2015-08-24 00:00:00','2015-08-25 00:00:00'])
df.dates=df.dates.astype(str)
df['dates'] = pd.to_datetime(df.dates.str.split(',\s*').str[0])
set(df['dates'])
我最终得到:
Timestamp('2015-08-24 00:00:00'),
Timestamp('2015-08-25 00:00:00'),
Timestamp('2015-08-31 00:00:00')
我需要将时间戳转换回日期时间(真的,只是日期)格式。
我已经根据this post的答案尝试了这个:
df['dates'].to_pydatetime()
但是返回:
AttributeError: 'Series' object has no attribute 'to_pydatetime'
在我的真实数据中,数据类型是:<M8[ns]
【问题讨论】:
Converting between datetime and Pandas Timestamp objects的可能重复 请参阅编辑后的帖子。我尝试了该帖子中建议的方法,但对我不起作用。 【参考方案1】:如果您只想从给定的Timestamp
对象中提取日期,则可以通过调用未绑定的Timestamp.date
方法来获取原始datetime.date
对象,如下所示:
import pandas as pd
from pandas import Timestamp, Series, date_range
start = Timestamp('2016-01-01')
stop = Timestamp('2016-01-02')
s = Series(date_range(start, stop, freq = 'H'))
print s[0]
2016-01-01 00:00:00
print s.map(Timestamp.date)[0]
2016-01-01
dtype: object
【讨论】:
【参考方案2】:您可以使用dt.date
返回一个datetime.date
对象:
In [3]:
set(df['dates'].dt.date)
Out[3]:
datetime.date(2015, 8, 24),
datetime.date(2015, 8, 25),
datetime.date(2015, 8, 31)
【讨论】:
这仅从时间戳中提取日期,而不是整个日期时间。【参考方案3】:我有一个类似的问题,我需要在 numpy 中将时间戳转换为日期时间,但我相信它也可以应用于 Pandas。 我认为使用 Pandas.Timestamp 下的函数会更好地转换时间戳,如下所示。
================================
np1=pd.DataFrame.to_numpy(df2)
print(np1)
[[Timestamp('2019-01-31 00:00:00') 'UCHITEC' 2000 2.56 5129.54]
[Timestamp('2019-01-16 00:00:00') 'UCHITEC' 1000 2.61 2618.79]]
np2= np.asarray(np1)
Timestamp('2019-01-16 00:00:00')
np3 = pd.Timestamp.to_datetime64(np2[0][0])
np4 = pd.Timestamp.to_pydatetime(np2[1][0])
print(np3)
print(np4)
2019-01-31T00:00:00.000000000
2019-01-16 00:00:00
【讨论】:
【参考方案4】:您可以直接使用apply进行转换:
df.dates = df.dates.apply(lambda x: x.date())
这会将之前的“日期”(作为时间戳)就地转换为仅截断的“日期时间”部分
【讨论】:
【参考方案5】:这对我有用。 df['time'] 由一列时间戳组成
df['time'] = df['time'].apply(lambda x: datetime.datetime.fromtimestamp(x).strftime('%Y-%m-%d'))
# i.e. x is a timestamp such as 1641772800 (or in date 2022-01-10)
【讨论】:
以上是关于Pandas 将时间戳列转换为日期时间的主要内容,如果未能解决你的问题,请参考以下文章
Pyspark 将字符串转换为日期时间戳列,包含两种不同的格式
将火花数据帧中的日期时间时间戳转换为 epocTimestamp