我有一个超过1000个时间戳(下面)的pandas数据帧,我想循环播放:
2016-02-22 14:59:44.561776
我很难将这个时间戳分成两列 - ' date'而且'时间'日期格式可以保持不变,但需要将时间转换为CST(包括毫秒)。
感谢您的帮助
答案 0 :(得分:15)
我不确定你为什么要这样做,但如果你真的必须......
df = pd.DataFrame({'my_timestamp': pd.date_range('2016-1-1 15:00', periods=5)})
>>> df
my_timestamp
0 2016-01-01 15:00:00
1 2016-01-02 15:00:00
2 2016-01-03 15:00:00
3 2016-01-04 15:00:00
4 2016-01-05 15:00:00
df['new_date'] = [d.date() for d in df['my_timestamp']]
df['new_time'] = [d.time() for d in df['my_timestamp']]
>>> df
my_timestamp new_date new_time
0 2016-01-01 15:00:00 2016-01-01 15:00:00
1 2016-01-02 15:00:00 2016-01-02 15:00:00
2 2016-01-03 15:00:00 2016-01-03 15:00:00
3 2016-01-04 15:00:00 2016-01-04 15:00:00
4 2016-01-05 15:00:00 2016-01-05 15:00:00
转换为CST更加棘手。我假设当前的时间戳是“不知道的”,即他们没有附加时区?如果没有,您希望如何转换它们?
更多详情:
https://docs.python.org/2/library/datetime.html
How to make an unaware datetime timezone aware in python
修改强>
一种替代方法,只在时间戳上循环一次而不是两次:
new_dates, new_times = zip(*[(d.date(), d.time()) for d in df['my_timestamp']])
df = df.assign(new_date=new_dates, new_time=new_times)
答案 1 :(得分:11)
我认为最简单的方法是使用pandas Series的dt
属性。对于您的情况,您需要使用dt.date
和dt.time
:
df = pd.DataFrame({'full_date': pd.date_range('2016-1-1 10:00:00.123', periods=10, freq='5H')})
df['date'] = df['full_date'].dt.date
df['time'] = df['full_date'].dt.time
In [166]: df
Out[166]:
full_date date time
0 2016-01-01 10:00:00.123 2016-01-01 10:00:00.123000
1 2016-01-01 15:00:00.123 2016-01-01 15:00:00.123000
2 2016-01-01 20:00:00.123 2016-01-01 20:00:00.123000
3 2016-01-02 01:00:00.123 2016-01-02 01:00:00.123000
4 2016-01-02 06:00:00.123 2016-01-02 06:00:00.123000
5 2016-01-02 11:00:00.123 2016-01-02 11:00:00.123000
6 2016-01-02 16:00:00.123 2016-01-02 16:00:00.123000
7 2016-01-02 21:00:00.123 2016-01-02 21:00:00.123000
8 2016-01-03 02:00:00.123 2016-01-03 02:00:00.123000
9 2016-01-03 07:00:00.123 2016-01-03 07:00:00.123000
答案 2 :(得分:7)
有同样的问题,这对我有用。
假设数据集中的日期列被调用"日期"
import pandas as pd
df = pd.read_csv(file_path)
df['Dates'] = pd.to_datetime(df['date']).dt.date
df['Time'] = pd.to_datetime(df['date']).dt.time
这将为您提供两列"日期"和"时间"分裂日期。
答案 3 :(得分:2)
如果你的时间戳已经是pandas格式(不是字符串),那么:
df["date"] = df["timestamp"].date
dt["time"] = dt["timestamp"].time
如果您的时间戳是字符串,则可以使用datetime模块解析它:
from datetime import datetime
data1["timestamp"] = df["timestamp"].apply(lambda x: \
datetime.strptime(x,"%Y-%m-%d %H:%M:%S.%f"))
来源: http://pandas.pydata.org/pandas-docs/stable/timeseries.html
答案 4 :(得分:2)
如果您的时间戳是字符串,则可以将其转换为datetime
对象:
from datetime import datetime
timestamp = '2016-02-22 14:59:44.561776'
dt = datetime.strptime(timestamp, '%Y-%m-%d %H:%M:%S.%f')
从那时起,您可以将它带到您喜欢的任何格式。
答案 5 :(得分:0)
尝试
s = '2016-02-22 14:59:44.561776'
date,time = s.split()
然后根据需要转换时间。
如果您想进一步分割时间,
hour, minute, second = time.split(':')
答案 6 :(得分:0)
试试这个:
def time_date(datetime_obj):
date_time = datetime_obj.split(' ')
time = date_time[1].split('.')
return date_time[0], time[0]