繁体   English   中英

将 Timestamps 列转换为 datetime.datetime。 适用于 1 行,而不适用于列

[英]Convert column of Timestamps to datetime.datetime. Works on 1 row, not on column

我查看了该站点上的每个答案,包括这个: 将时间戳转换为 pandas.Series 中的 datetime.datetime并且没有任何效果。 它总是返回一个时间戳。

我有一个带有time列的数据框,其中包含2022-06-24 15:07:52格式class 'pandas._libs.tslibs.timestamps.Timestamp'>值。

我正在尝试使用 pandas 的pd.df.to_sql函数将我的整个数据框写入 MySQL 数据库。 但是我遇到了一个错误,因为数据库中time列的类型是Datetime ,所以我需要在数据框中将 Timestamps 转换为 Datetime 格式。

我试过df['time'] = pd.to_datetime(df['time']) ,它返回时间戳。

当应用于单行时,唯一有效的是df['time'][0].to_pydatetime() 但是,当我尝试df['time'] = df['time'].apply(lambda x: x.to_pydatetime())时,它不起作用。 元素仍然是时间戳。

我在另一个答案中to_pydatetime不适用于系列或列,因此我还尝试将列提取为列表,然后将to_pydatetime()应用于其元素(有效,每个元素都转换为datetime.datetime ) 然后将该列表放回数据框中。 但是,当我这样做时,每个元素都会再次转换为时间戳...

import pandas as pd

df = pd.DataFrame({'time': [1451602801, 1451606401, 1451610001, 1451613601, 1451617201]})
df['datetime'] = pd.to_datetime(df['time'], unit='s')
print(df)

输出

         time            datetime
0  1451602801 2015-12-31 23:00:01
1  1451606401 2016-01-01 00:00:01
2  1451610001 2016-01-01 01:00:01
3  1451613601 2016-01-01 02:00:01
4  1451617201 2016-01-01 03:00:01
import pandas as pd

df = pd.DataFrame({'time': [1451602801, 1451606401, 1451610001, 1451613601, 1451617201]})
df['datetime'] = pd.to_datetime(df['time'], unit='s')

# Wrap the numpy output as a series and force dtype to object:
df['timestamp'] = pd.Series(df.datetime.dt.to_pydatetime(), dtype='O')
print(type(df.datetime[0]))
print(type(df.timestamp[0]))

输出:

<class 'pandas._libs.tslibs.timestamps.Timestamp'>
<class 'datetime.datetime'>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM