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'>
Saya memiliki Seri dengan Stempel Waktu sebagai nilai, bukan indeks. Saya berharap metode apply dipanggil pada setiap elemen, tetapi ternyata tidak, melainkan dipanggil pada DatetimeIndex.
pd.show_versions()
commit: Tidak ada
python: 3.6.0.final.0
python-bits: 64
OS: Darwin
Rilis OS: 16.7.0
mesin: x86_64
prosesor: i386
byteorder: sedikit
LC_ALL: Tidak ada
LANG: en_CA.UTF-8
LOCALE: en_CA.UTF-8
panda: 0.20.2
pytest: 3.0.5
pip: 9.0.1
setuptools: 35.0.1
Cython: Tidak ada
numpy: 1.13.0
scipy: 0.19.1
xarray: 0.9.6
IPython: 6.0.0
sphinx: 1.5.3
patsy: Tidak ada
dateutil: 2.6.0.0
pytz: 2016.10
blosc: Tidak ada
kemacetan: 1.2.0
tabel: Tidak ada
numexpr: Tidak ada
bulu: Tidak ada
matplotlib: 2.0.0
openpyxl: 2.4.8
xlrd: 1.0.0
xlwt: Tidak ada
xlsxwriter: 0.9.8
lxml: Tidak ada
bs4: Tidak ada
html5lib: 0,999
sqlalchemy: Tidak ada
pymysql: Tidak ada
psycopg2: Tidak ada
jinja2: 2.9.5
s3fs: Tidak ada
pandas_gbq: Tidak ada
pandas_datareader: Tidak ada
Juga, beberapa info tentang kasus penggunaan saya:
Saya ingin menerapkan metode tz_localize
ke setiap Stempel Waktu dalam rangkaian. Saya awalnya mencoba tz_localize
pada seri itu sendiri, tetapi itu meningkat
TypeError: index is not a valid DatetimeIndex or PeriodIndex
Saya menyadari adalah mungkin untuk mencapai ini dengan menggunakan reindex
, tetapi saya bertanya-tanya apakah mungkin untuk melakukan ini dengan Stempel Waktu sebagai nilai Seri juga.
@nathanielatom Anda dapat menggunakan tz_localize
/ tz_convert
pada Seri melalui dt
accessor:
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]
Lebih lanjut, alasan Anda mendapatkan output yang Anda lihat dengan apply
, adalah karena apply pertama kali akan mencoba memanggil fungsi pada semua nilai (yang disimpan di bawah tenda sebagai DatetimeIndex, meskipun itu adalah nilai Seri ), dan hanya jika gagal, akan memanggil fungsi pada setiap elemen.
Jika Anda mengadaptasi fungsi sedikit untuk dinaikkan ketika tidak mendapatkan nilai skalar, Anda akan melihat keluaran yang diharapkan:
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)]