dtstr = "2014 Jan 9 05:15 FAKE"
arg = np.array([dtstr], dtype=object)

>>> pd.core.tools.datetimes._guess_datetime_format_for_array(arg, dayfirst=None)
'%Y %b %d %H:%M FAKE'

Because _guess_datetime_format_for_array keeps "FAKE", to_datetime then goes through _array_strptime_with_fallback, which drops the bad tz completely.

Not sure exactly where to catch this, but need to handle it somewhere in order to deprecate #18702.

cc @MarcoGorelli

Comment From: MarcoGorelli

Hey,

it looks right to me. stdlib at least is an agreement:

In [78]: dt.datetime.strptime("2014 Jan 9 05:15 FAKE", '%Y %b %d %H:%M FAKE')
Out[78]: datetime.datetime(2014, 1, 9, 5, 15)

Comment From: jbrockmendel

Thanks for taking a look. So if the inference result itself isn't the issue, how would you suggest deprecating silently-ignoring FAKE?

Comment From: MarcoGorelli

All I can think of at the moment would be that dateutil (which we use to infer formats) should raise on such input

Either that, or that we move away from dateutil and do our own inference entirely, which would raise in such cases. I think this would be my preferred option

Comment From: jbrockmendel

In #51477 i changed our dateutil wrapper to deprecate silent-dropping. is there somewhere we could reuse that instead of calling dateutil directly?

Comment From: MarcoGorelli

I'll take a look