Pandas: рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рдЖрд╡реЗрджрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 3 рдЕрдЧре░ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pandas-dev/pandas

рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдХреЛрдб рдирдореВрдирд╛, рдПрдХ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЙрджрд╛рд╣рд░рдг

import pandas as pd

ts = pd.Series([pd.Timestamp('2017-07-31 20:08:46.110998-04:00'), 
                pd.Timestamp('2017-08-01 20:08:46.110998-04:00'), 
                pd.Timestamp('2017-08-02 20:08:46.110998-04:00')])

def func(elem):
    print(type(elem))
    return elem
print(type(ts))
print(type(ts[0]))

ts.apply(func);

# Prints out:
# <class 'pandas.core.series.Series'>
# <class 'pandas._libs.tslib.Timestamp'>
# <class 'pandas.core.indexes.datetimes.DatetimeIndex'>

рд╕рдорд╕реНрдпрд╛ рд╡рд┐рд╡рд░рдг

рдореЗрд░реЗ рдкрд╛рд╕ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рдмрдЬрд╛рдп рдореВрд▓реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЗ рд╕рд╛рде рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕реЗ рдбреЗрдЯрд╛рдЗрдордЗрдВрдбреЗрдХреНрд╕ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдкреЗрдХреНрд╖рд┐рдд рдЙрддреНрдкрд╛рджрди





pd.show_versions() рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ

рд╕реНрдерд╛рдкрд┐рдд рд╕рдВрд╕реНрдХрд░рдг

рдкреНрд░рддрд┐рдмрджреНрдз: рдХреЛрдИ рдирд╣реАрдВ
рдЕрдЬрдЧрд░: 3.6.0.final.0
рдЕрдЬрдЧрд░-рдмрд┐рдЯреНрд╕: 64
рдУрдПрд╕: рдбрд╛рд░реНрд╡рд┐рди
рдУрдПрд╕-рд░рд┐рд▓реАрдЬрд╝: 16.7.0
рдорд╢реАрди: x86_64
рдкреНрд░реЛрд╕реЗрд╕рд░: i386
рдмрд╛рдЗрдЯрдСрд░реНрдбрд░: рдереЛрдбрд╝рд╛
LC_ALL: рдХреЛрдИ рдирд╣реАрдВ
рд▓реИрдВрдЧ: en_CA.UTF-8
LOCALE: en_CA.UTF-8

рдкрд╛рдВрдбрд╛: 0.20.2
pytest: 3.0.5
рдкрд╛рдЗрдк: 9.0.1
рд╕реЗрдЯрдкреНрдЯреВрд▓: 35.0.1
рд╕рд╛рдЗрдерди: рдХреЛрдИ рдирд╣реАрдВ
рд╕рдВрдЦреНрдпрд╛: 1.13.0
scipy: 0.19.1
xarray: 0.9.6
рдЖрдИрдкреАрдереЙрди: 6.0.0
рд╕реНрдлрд┐рдВрдХреНрд╕: 1.5.3
patsy: рдХреЛрдИ рдирд╣реАрдВ
рджрд┐рдирд╛рдВрдХ: 2.6.0
pytz: 2016.10
рдмреНрд▓реЙрд╕реНрдХ: рдХреЛрдИ рдирд╣реАрдВ
рдЕрдбрд╝рдЪрди: 1.2.0
рдЯреЗрдмрд▓: рдХреЛрдИ рдирд╣реАрдВ
numexpr: рдХреЛрдИ рдирд╣реАрдВ
рдкрдВрдЦ: рдХреЛрдИ рдирд╣реАрдВ
matplotlib: 2.0.0
Openpyxl: 2.4.8
xlrd: 1.0.0
xlwt: рдХреЛрдИ рдирд╣реАрдВ
xlsxwriter: 0.9.8
lxml: рдХреЛрдИ рдирд╣реАрдВ
bs4: рдХреЛрдИ рдирд╣реАрдВ
html5lib: 0.999
рд╢рд▓реНрдХрд▓рдЪреЗрдореА: рдХреЛрдИ рдирд╣реАрдВ
pymysql: рдХреЛрдИ рдирд╣реАрдВ
рдорд╛рдирд╕ 2: рдХреЛрдИ рдирд╣реАрдВ
jinja2: 2.9.5
s3fs: рдХреЛрдИ рдирд╣реАрдВ
pandas_gbq: рдХреЛрдИ рдирд╣реАрдВ
pandas_datareader: рдХреЛрдИ рдирд╣реАрдВ

Timezones Usage Question

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА:

рдореИрдВ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдореЗрдВ tz_localize рдкрджреНрдзрддрд┐ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ tz_localize рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рд╡рд╣ рдЙрдард╛

TypeError: index is not a valid DatetimeIndex or PeriodIndex

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ reindex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЯрд┐рдорд╕реНрдЯреИрдореНрдк рдХреЗ рд╕рд╛рде рд╕реАрд░реАрдЬ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рднреАред

@nathanielatom рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ tz_localize / tz_convert рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ dt рдПрдХреНрд╕реЗрд╕рд░:

In [19]: ts.dt.tz_convert('UTC')
Out[19]: 
0   2017-08-01 00:08:46.110998+00:00
1   2017-08-02 00:08:46.110998+00:00
2   2017-08-03 00:08:46.110998+00:00
dtype: datetime64[ns, UTC]

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ apply рд╕рд╛рде рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрддреНрдкрд╛рджрди рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрд╡реЗрджрди рдкрд╣рд▓реЗ рд╕рднреА рдорд╛рдиреЛрдВ рдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ (рдЬреЛ рдХрд┐ рдбреЗрдЯрд╛рдЗрдордЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реБрдб рдХреЗ рддрд╣рдд рдкрдХрдбрд╝реЗ рдЧрдП рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдореВрд▓реНрдп рд╣реИрдВ ), рдФрд░ рдХреЗрд╡рд▓ рдЕрдЧрд░ рд╡рд╣ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред

рдпрджрд┐ рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдереЛрдбрд╝рд╛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ рдЬрдм рдЗрд╕реЗ рд╕реНрдХреЗрд▓рд░ рдорд╛рди рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЕрдкреЗрдХреНрд╖рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦрддреЗ рд╣реИрдВ:

In [21]: def func(elem):
    ...:     assert not hasattr(elem, 'ndim')
    ...:     print(type(elem))
    ...:     return elem
    ...: 

In [22]: ts.apply(func)
<class 'pandas._libs.tslib.Timestamp'>
<class 'pandas._libs.tslib.Timestamp'>
<class 'pandas._libs.tslib.Timestamp'>
Out[22]: 
0   2017-07-31 20:08:46.110998-04:00
1   2017-08-01 20:08:46.110998-04:00
2   2017-08-02 20:08:46.110998-04:00
dtype: datetime64[ns, pytz.FixedOffset(-240)]
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

mfmain picture mfmain  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

abatkins picture abatkins  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

marcelnem picture marcelnem  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

tade0726 picture tade0726  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ebran picture ebran  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ