Skip to content

Commit 7786be4

Browse files
committed
ENH: Support for list of formats in pd.to_datetime() (pandas-dev#55226) pandas-dev#55698
1 parent 95b616a commit 7786be4

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

pandas/core/tools/datetimes.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -1145,7 +1145,16 @@ def to_datetime(
11451145
if not cache_array.empty:
11461146
result = _convert_and_box_cache(argc, cache_array)
11471147
else:
1148-
result = convert_listlike(argc, format)
1148+
#CHANGED HERE
1149+
if isinstance(format, (list, tuple)):
1150+
format = np.array(format, dtype="O")
1151+
return_list = [] # return list
1152+
for i, fmt in enumerate(format):
1153+
return_temp = convert_listlike(argc[i],fmt) # return object of convert_listlike
1154+
return_list.append(return_temp) # add in return list
1155+
result = DatetimeIndex(return_list) # transformed object in datetimeindex
1156+
else:
1157+
result = convert_listlike(argc, format)
11491158
else:
11501159
result = convert_listlike(np.array([arg]), format)[0]
11511160
if isinstance(arg, bool) and isinstance(result, np.bool_):

pandas/tests/tools/test_to_datetime.py

+14-1
Original file line numberDiff line numberDiff line change
@@ -1090,7 +1090,20 @@ def test_to_datetime_now_with_format(self, format, expected_ds, string, attribut
10901090
[expected_ds, getattr(Timestamp, attribute)()], dtype="datetime64[ns, UTC]"
10911091
)
10921092
assert (expected - result).max().total_seconds() < 1
1093-
1093+
1094+
1095+
def test_to_datetime_where_formart_is_list(self):
1096+
# https://github.com/pandas-dev/pandas/issues/55226
1097+
data = ['2023-10-12','2023-10-13 14:30:00']
1098+
all_formats = ['%Y-m-%d','%Y-%m-%d %H:%M:%S']
1099+
result = to_datetime(data,format=all_formats)
1100+
expect = DatetimeIndex(
1101+
[to_datetime(data[0],all_formats[0]),to_datetime(data[1],all_formats[1])], dtype="datetime64[ns]"
1102+
)
1103+
1104+
tm.assert_index_equal(result,expect)
1105+
1106+
10941107
@pytest.mark.parametrize(
10951108
"dt", [np.datetime64("2000-01-01"), np.datetime64("2000-01-02")]
10961109
)

0 commit comments

Comments
 (0)