从pandas时间戳提取日期和时间

3z6pesqy  于 2023-06-20  发布在  其他
关注(0)|答案(4)|浏览(169)

我有一个timestamp列,其中的时间戳格式如下

2016-06-16T21:35:17.098+01:00

我想从中提取日期和时间。我做了以下工作:

import datetime as dt

df['timestamp'] = df['timestamp'].apply(lambda x : pd.to_datetime(str(x)))

df['dates'] = df['timestamp'].dt.date

这一招奏效了一段时间。但突然间就没有了。
如果我再次执行df['dates'] = df['timestamp'].dt.date,我会得到以下错误

Can only use .dt accessor with datetimelike values

幸运的是,我已将数据框保存为csv中的dates,但现在我想以23:00:00.051创建另一列time

    • 编辑**

从原始数据文件(1500万个样本)中,timestamp列如下所示(前5个样本):

timestamp

0           2016-06-13T00:00:00.051+01:00
1           2016-06-13T00:00:00.718+01:00
2           2016-06-13T00:00:00.985+01:00
3           2016-06-13T00:00:02.431+01:00
4           2016-06-13T00:00:02.737+01:00

执行以下命令后

df['timestamp'] = df['timestamp'].apply(lambda x : pd.to_datetime(str(x)))

timestamp列看起来类似于dtype作为dtype:datetime64 [ns]

0    2016-06-12 23:00:00.051
1    2016-06-12 23:00:00.718
2    2016-06-12 23:00:00.985
3    2016-06-12 23:00:02.431
4    2016-06-12 23:00:02.737

最后

df['dates'] = df['timestamp'].dt.date

0           2016-06-12
1           2016-06-12
2           2016-06-12
3           2016-06-12
4           2016-06-12
    • 编辑2**

发现了错误。我已经清理了数据并将 Dataframe 保存在csv文件中,所以我不必再次进行清理。当我读取csv时,时间戳dtype变为object。现在我该怎么解决这个问题?

9gm1akwq

9gm1akwq1#

首先执行以下操作:

df['time'] = pd.to_datetime(df['timestamp'])

在你像往常一样进行提取之前:

df['dates'] = df['time'].dt.date
vuv7lop3

vuv7lop32#

如果日期是字符串形式,则:

import datetime

# this line converts the string object in Timestamp object
df['DateTime'] = [datetime.datetime.strptime(d, "%Y-%m-%d %H:%M") for d in df["DateTime"]]

# extracting date from timestamp
df['Date'] = [datetime.datetime.date(d) for d in df['DateTime']] 

# extracting time from timestamp
df['Time'] = [datetime.datetime.time(d) for d in df['DateTime']]

如果对象已经是Timestamp格式,则跳过第一行代码。
%Y-%m-%d %H:%M这意味着你的timestamp对象必须是2016-05-16 12:35:00这样的形式。

pengsaosao

pengsaosao3#

你可以使用pandas内置的to_datetime对象来实现

df['timestamp'] = pd.to_datetime(df['timestamp'])
df['date'] = df['timestamp'].dt.date
df['time'] = df['timestamp'].dt.time
cetgtptt

cetgtptt4#

导入csv时,请使用pandas.read_csv()parse_dates参数。例如,要导入列utc_datetime作为datetime:

parse_dates = ['utc_datetime']
df = pandas.read_csv('file.csv', parse_dates=parse_dates)

要从timestamp提取日期,请使用numpy代替pandas:

df['utc_date'] = numpy.array(df['utc_datetime'].values, dtype='datetime64[D]')

Numpy datetime操作比pandas datetime操作快得多。

相关问题