I have dates in string format delimited with space, and I am trying to use datatime to convert them to dates so later on I can sort my data based on the name's column and date's column.Here is my code:
from datetime import datetime
DATE = '1 nov 2010'
current_date = datetime.strptime(DATE, '%d %b %y')
print(current_date)
and here is the error I am getting:
Traceback (most recent call last):
File "DEL.py", line 4, in <module>: current_date = datetime.strptime(DATE, '%d %b %y')
File "lib\_strptime.py", line 565, in _strptime_datetime: tt, fraction = _strptime(data_string, format)
File "lib\_strptime.py", line 365, in _strptime:
data_string[found.end():])
ValueError: unconverted data remains: 10
I have checked all the previous questions on this topic and it seems none of them apply in this scenario as I do not have any hidden character or anything and it is as simple as typing the dates. Appreciate if someone can help me out with this.
The %y parameter of strptime is "Year without century". An uppercase %Y is what you need.
Related
I have a pandas dataframe whose first column is string representation of timeseries. I would like to convert this column into datetime object using the following line of code:
df['Timestamp'] = pd.to_datetime(
df['Timestamp'], format='%m-%d-%Y %H:%M:%S').dt.strftime('%Y-%m-%d %H:%M:%S')
I want to preserve the format in the datetime object to be month first and year last but I am receiving an error message:
df['Timestamp'] = pd.to_datetime(
File "C:\ProgramData\Anaconda3\envs\tf\lib\site-packages\pandas\core\tools\datetimes.py", line 1051, in to_datetime
values = convert_listlike(arg._values, format)
File "C:\ProgramData\Anaconda3\envs\tf\lib\site-packages\pandas\core\tools\datetimes.py", line 394, in _convert_listlike_datetimes
res = _to_datetime_with_format(
File "C:\ProgramData\Anaconda3\envs\tf\lib\site-packages\pandas\core\tools\datetimes.py", line 514, in _to_datetime_with_format
raise err
File "C:\ProgramData\Anaconda3\envs\tf\lib\site-packages\pandas\core\tools\datetimes.py", line 501, in _to_datetime_with_format
res = _array_strptime_with_fallback(
File "C:\ProgramData\Anaconda3\envs\tf\lib\site-packages\pandas\core\tools\datetimes.py", line 437, in _array_strptime_with_fallback
result, timezones = array_strptime(arg, fmt, exact=exact, errors=errors)
File "pandas\_libs\tslibs\strptime.pyx", line 150, in pandas._libs.tslibs.strptime.array_strptime
ValueError: time data ' 06-30-2022 19:41:15' does not match format '%m-%d-%Y %H:%M:%S' (match)
The format inside pd.to_datetime is forcing pd.to_datetime to seek only datetimes with this format. Remove it and just apply dt.strftime:
df['Timestamp'] = pd.to_datetime(df['Timestamp']).dt.strftime('%Y-%m-%d %H:%M:%S')
There is a space before your month value: ' 06-30-2022 19:41:15'. You need to strip the string before applying the to_datetime. Something like this:
df['Timestamp'] = pd.to_datetime(
df['Timestamp'].str.strip(), format='%m-%d-%Y %H:%M:%S'
).dt.strftime('%Y-%m-%d %H:%M:%S')
I have a very simple timestamp I need to parse:
10/2/2020 3:19:42 PM (UTC-7)
But using python 3.6, when I try to parse this, I get the following:
>>> datetime.strptime('10/2/2020 3:19:42 PM (UTC-7)', '%m/%d/%Y %I:%M:%S %p (%Z%z)')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "_strptime.py", line 565, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "_strptime.py", line 362, in _strptime
(data_string, format))
ValueError: time data '10/2/2020 3:19:42 PM (UTC-7)' does not match format '%m/%d/%Y %I:%M:%S %p (%Z%z)'
I have tried dateutil.parser, as well as several variations of the format string. The piece that's tripping up strptime is the (UTC-7) portion.
Is the string format wrong? How can I parse this string and receive the timezone information as well? Any help is appreciated.
Edit: If the string is (UTC-0700) then the parsing works. But I cannot control how the timestamps are being formatted, is there a way to parse them in their current format (UTC-7)?
Ah, it turned out to be quite silly:
>>> import dateutil
>>> dateutil.parser.parse(dt, fuzzy=True)
datetime.datetime(2020, 10, 2, 15, 19, 42, tzinfo=tzoffset(None, 25200))
Should have used fuzzy logic before. :-)
EDIT: The above does NOT work (thanks to #wim for pointing it out) - Fuzzy flag is ignoring the sign of the offset string.
Here is code that works:
>>> from datetime import datetime
>>> import re
>>> dt = '10/2/2020 3:19:42 PM (UTC-7)'
>>> sign, offset = re.search('\(UTC([+-])(\d+)\)', dt).groups()
>>> offset = f"0{offset}00" if len(offset) == 1 else f"{offset}00"
>>> dt = re.sub(r'\(UTC.\d+\)', f'(UTC{sign}{offset})', dt)
>>> datetime.strptime(dt, '%m/%d/%Y %I:%M:%S %p (%Z%z)')
datetime.datetime(2020, 10, 2, 15, 19, 42, tzinfo=datetime.timezone(datetime.timedelta(-1, 61200), 'UTC'))
I have the following code:
from datetime import datetime
date_time_str = '2020-07-17 21:59:49.55'
date_time_obj = datetime.strptime(date_time_str, '%y-%m-%d %H:%M:%S.%f')
print "The type of the date is now", type(date_time_obj)
print "The date is", date_time_obj
Which results in the err:
Traceback (most recent call last):
File "main.py", line 5, in <module>
date_time_obj = datetime.strptime(date_time_str, '%y-%m-%d %H:%M:%S.%f')
File "/usr/lib/python2.7/_strptime.py", line 332, in _strptime
(data_string, format))
ValueError: time data '2020-07-17 21:59:49.553' does not match format '%y-%m-%d %H:%M:%S.%f'
Why cant I convert this date? The following example works:
date_time_str = '18/09/19 01:55:19'
date_time_obj = datetime.strptime(date_time_str, '%d/%m/%y %H:%M:%S')
First of all, this is not valid Python 3 code. You've used the Python 2 print statement in your code, and trying to run this on Python 3 causes a SyntaxError.
As the error indicates, your date string does not match the format you specified. Take a look at the format codes; the first issue I notice is that you give a 4-digit year (2020) but try to line it up with %y, which is for two-digit year. There may be other issues as well, which should be easy to find looking through that table.
I've got no idea, why the heck this won't work..
This is my code:
from datetime import datetime
d = "19. Mai 2020"
date1 = datetime.strptime(d, "%d. %B %Y")
As a result, I get the following error code:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-27-78591e667c99> in <module>()
----> 1 date1 = datetime.strptime(s, "%d. %B %Y")
1 frames
/usr/lib/python3.6/_strptime.py in _strptime(data_string, format)
360 if not found:
361 raise ValueError("time data %r does not match format %r" %
--> 362 (data_string, format))
363 if len(data_string) != found.end():
364 raise ValueError("unconverted data remains: %s" %
ValueError: time data '19. Mai 2020' does not match format '%d. %B %Y'
After 48h of studying several tutorials, I still don't have a clue...
Hopefully, one of you does see my .. mistake?
Regards,
P!
If the appropriate locale is set, strptime will respect that:
>>> locale.setlocale(locale.LC_ALL, "de_DE")
'de_DE'
>>> datetime.strptime("19. Mai 2020", "%d. %B %Y")
datetime.datetime(2020, 5, 19, 0, 0)
I am getting an input file which contains datetime. My purpose is to read the file and filter the db.
Input file sample
2019-05-31 15:21:53
Below code work fine in my PC (python 3.6.4)
f=open("lastRun.txt", "r+")
lastHour=(f.read())
f.close()
lHourDate = datetime.datetime.strptime(lastHour, '%Y-%m-%d %H:%M:%S')
print(lHourDate)
however in production we have (Pyhton 3.6.7)
where the same code is throwing below error.
Traceback (most recent call last):
File "hourlyLoadEscenic.py", line 37, in <module>
lHourDate = datetime.strptime(lastHour, "%Y-%m-%d %H:%M:%S")
File "/usr/local/lib/python3.6/_strptime.py", line 565, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "/usr/local/lib/python3.6/_strptime.py", line 365, in _strptime
data_string[found.end():])
ValueError: unconverted data remains:
I can do 'print' and see the lastHour has the input field. but in date conversion it is throwing error.
Please suggest