pd.to_datetime小时和秒

Ale*_*lli 7 python datetime

晚上好,

我有一个dataframe(Pandas),其列表示日期,格式如下:

print(df["date"])

14/01/18 12:47
14/01/18 12:48
14/01/18 12:50
14/01/18 12:57
14/01/18 12:57
14/01/18 12:57
14/01/18 12:57
14/01/18 12:57
14/01/18 12:58
Run Code Online (Sandbox Code Playgroud)

具体来说,我想:1. 使用pd.to_datetime 转换datetime。2 .创建以下附加

df["month"]
df["day"]
df["year"]
df["hour"]
df["minute"]
Run Code Online (Sandbox Code Playgroud)

我试着跑:

df['date'] = pd.to_datetime(df['date'], format = "%d/%m/%Y %H/%M" )
Run Code Online (Sandbox Code Playgroud)

但是出现以下错误

time data '02/01/18 08:41' does not match format '%d/%m/%Y %H/%M' (match)
Run Code Online (Sandbox Code Playgroud)

Ore*_*shi 8

除了grovina的答案以外,您还可以直接使用dt访问器,而不是使用apply 。

这是一个示例:

>>> data = [['2017-12-01'], ['2017-12-30'],['2018-01-01']]
>>> df = pd.DataFrame(data=data, columns=['date'])
>>> df
         date
0  2017-12-01
1  2017-12-30
2  2018-01-01
>>> df.date
0    2017-12-01
1    2017-12-30
2    2018-01-01
Name: date, dtype: object
Run Code Online (Sandbox Code Playgroud)

注意df.date是一个对象吗?让它变成您想要的日期

>>> df.date = pd.to_datetime(df.date)
>>> df.date
0   2017-12-01
1   2017-12-30
2   2018-01-01
Name: date, dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)

所需的格式用于字符串格式。我认为您无法将实际的datetime64转换为这种格式。现在,让我们在单独的列中创建日期格式的字符串格式

 >>> df['new_formatted_date'] = df.date.dt.strftime('%d/%m/%y %H:%M')
 >>> df.new_formatted_date
 0    01/12/17 00:00
 1    30/12/17 00:00
 2    01/01/18 00:00
 Name: new_formatted_date, dtype: object
Run Code Online (Sandbox Code Playgroud)

最后,由于df.date列的日期为datetime64,因此您可以dt直接在其上使用访问器。无需申请

>>> df['month'] = df.date.dt.month
>>> df['day'] = df.date.dt.day
>>> df['year'] = df.date.dt.year
>>> df['hour'] = df.date.dt.hour
>>> df['minute'] = df.date.dt.minute
>>> df
        date new_formatted_date  month  day  year  hour  minute
0 2017-12-01     01/12/17 00:00     12    1  2017     0       0
1 2017-12-30     30/12/17 00:00     12   30  2017     0       0
2 2018-01-01     01/01/18 00:00      1    1  2018     0       0
Run Code Online (Sandbox Code Playgroud)


小智 8

你可以像下面这样在 format= 之间输入冒号(:)

df['Date/Time']=pd.to_datetime(df['Date/Time'],format='%m/%d/%Y %H:%M:%S')
Run Code Online (Sandbox Code Playgroud)


gro*_*ina 5

您想要的格式是(小时'%d/%m/%y %H:%M'和分钟之间的小写 y 和冒号)。看看这里

然后您可以创建其他列:

df['month'] = df['date'].apply(lambda x: x.month)
df['day'] = df['date'].apply(lambda x: x.day)
df['year'] = df['date'].apply(lambda x: x.year)
df['hour'] = df['date'].apply(lambda x: x.hour)
df['minute'] = df['date'].apply(lambda x: x.minute)
Run Code Online (Sandbox Code Playgroud)