简体   繁体   中英

Python Pandas to_datetime Without Zero Padded

I am trying to convert a date & time string using Pandas 'to_datetime', but the string values is non-zero padded:

3/31/22 23:30
3/31/22 23:45
4/1/22 0:00
4/1/22 0:15

I have the following but get a mismatch error

pd.to_datetime(df.TimeStamp, format="%m/%d/%y %H:%m")

Is there a way to add the zero padding or have 'to_datetime' accept the above formatting?

df['date'].astype('datetime64').dt.strftime('%m/%d/%y %H:%M')
0    03/31/22 23:30
1    03/31/22 23:45
2    04/01/22 00:00
3    04/01/22 00:15

data used

data = {'': {0: ' ', 1: ' ', 2: ' ', 3: ' '},
 'date': {0: '3/31/22 23:30',
  1: '3/31/22 23:45',
  2: '4/1/22 0:00',
  3: '4/1/22 0:15'}}
df=pd.DataFrame(data)
df
    date
0       3/31/22 23:30
1       3/31/22 23:45
2       4/1/22 0:00
3       4/1/22 0:15

The trouble isn't in the padding, it's actually in your formatting call. Note the capitalization of minutes (M) vs months (m), you used (m) for both. ( documentation here ).

Demonstration of working code is below

pd.to_datetime(df.TimeStamp, format="%m/%d/%y %H:%m")

should be

pd.to_datetime(df.TimeStamp, format="%M/%d/%y %H:%m")

import pandas as pd
times = [
    "3/31/22 23:30",
    "3/31/22 23:45",
    "4/1/22 0:00",
    "4/1/22 0:15"
]

df = pd.DataFrame(times, columns=['TimeStamp'])
pd.to_datetime(df.TimeStamp, format="%m/%d/%y %H:%M")

>> 0   2022-03-31 23:30:00
>> 1   2022-03-31 23:45:00
>> 2   2022-04-01 00:00:00
>> 3   2022-04-01 00:15:00
>> Name: TimeStamp, dtype: datetime64[ns]

That said, if anyone lands here looking for the solution to the zero-padding, the hash/dash trick is worth further reading (though it does not work in many circumstances)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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