Pandas часовой пояс - как проверить, не определен ли он для всего столбца? - PullRequest
1 голос
/ 03 августа 2020

Чтобы проверить, не определен ли часовой пояс для первой строки столбца «timestamp» в серии pandas, я могу запросить .tz для одного элемента с:

import pandas as pd

dates = pd.Series(pd.date_range('2/2/2002', periods=10, freq='M'))
assert dates.iloc[0].tz is None

Do I есть способ проверить, есть ли элементы, для которых определен часовой пояс, или, что еще лучше, способ перечислить все часовые пояса во всей серии без циклического перебора его элементов, например:

dates.iloc[5] = dates.iloc[5].tz_localize('Africa/Abidjan')
dates.iloc[7] = dates.iloc[7].tz_localize('Africa/Banjul')

zones = []
for k in range(dates.shape[0]):
    zones.append(dates.iloc[k].tz)
print(set(zones))

?

1 Ответ

1 голос
/ 04 августа 2020

Вы можете получить настройку часового пояса для DateTime Series, используя dt accessor , т.е. S.dt.tz. Это приведет к увеличению ValueError, если у вас есть несколько часовых поясов, поскольку объекты datetime будут затем храниться в массиве объектов, в отличие от массива datetime64, если у вас только один часовой пояс или None. Вы можете использовать это, чтобы получить решение, которое будет немного более эффективным, чем каждый раз зацикливаться:

import pandas as pd
# tzinfo is None:
dates0 = pd.Series(pd.date_range('2/2/2002', periods=10, freq='M'))
# one timezone:
dates1 = dates0.dt.tz_localize('Africa/Abidjan')
# mixed timezones:
dates2 = dates0.copy()
dates2.iloc[5] = dates2.iloc[5].tz_localize('Africa/Abidjan')
dates2.iloc[7] = dates2.iloc[7].tz_localize('Africa/Banjul')

for ds in [dates0, dates1, dates2]:
    try:
        zones = ds.dt.tz
    except ValueError:
        zones = set(t.tz for t in ds.values)
    
    print(zones)
    
# prints
None
Africa/Abidjan
{None, <DstTzInfo 'Africa/Banjul' GMT0:00:00 STD>, <DstTzInfo 'Africa/Abidjan' GMT0:00:00 STD>}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...