我正在尝试从时间戳中提取日期和时间:
DateTime
31/12/2015 22:45
是:
Date | Time |
31/12/2015| 22:45 |
但是当我使用时:
df['Date'] = pd.to_datetime(df['DateTime']).dt.date
我得到:
2015-12-31
与时间相似我得到:
df['Time'] = pd.to_datetime(df['DateTime']).dt.time
给出
23:45:00
但如果我尝试格式化它,我会收到错误:
df['Date'] = pd.to_datetime(f['DateTime'], format='%d/%m/%Y').dt.date
ValueError: unconverted data remains: 00:00
答案 0 :(得分:3)
尝试strftime
df['DateTime'] = pd.to_datetime(df['DateTime'])
df['Date'] = df['DateTime'].dt.strftime('%d/%m/%Y')
df['Time'] = df['DateTime'].dt.strftime('%H:%M')
DateTime Date Time
0 2015-12-31 22:45:00 31/12/2015 22:45
答案 1 :(得分:2)
选项1
由于您实际上不需要在日期上操作,只需将列拆分为空格:
df = df.DateTime.str.split(expand=True)
df.columns = ['Date', 'Time']
df
Date Time
0 31/12/2015 22:45
选项2
或者,只需完全删除格式说明符:
v = pd.to_datetime(df['DateTime'], errors='coerce')
df['Time'] = v.dt.time
df['Date'] = v.dt.floor('D')
df
Time Date
0 22:45:00 2015-12-31
答案 2 :(得分:0)
如果您的DateTime
列已经是日期时间类型,则无需在其上调用pd.to_datetime
。
您是在寻找字符串("12:34"
)还是时间戳(下午12:34
的概念)?如果你正在寻找前者,那么这里有答案。如果您正在寻找后者,可以使用.dt.time
和.dt.date
访问者。
>>> pd.__version__
u'0.20.2'
>>> df = pd.DataFrame({'DateTime':pd.date_range(start='2018-01-01', end='2018-01-10')})
>>> df['date'] = df.DateTime.dt.date
>>> df['time'] = df.DateTime.dt.time
>>> df
DateTime date time
0 2018-01-01 2018-01-01 00:00:00
1 2018-01-02 2018-01-02 00:00:00
2 2018-01-03 2018-01-03 00:00:00
3 2018-01-04 2018-01-04 00:00:00
4 2018-01-05 2018-01-05 00:00:00
5 2018-01-06 2018-01-06 00:00:00
6 2018-01-07 2018-01-07 00:00:00
7 2018-01-08 2018-01-08 00:00:00
8 2018-01-09 2018-01-09 00:00:00
9 2018-01-10 2018-01-10 00:00:00