使用iloc以一种不明显的方式访问数据帧中的单列时区感知时间戳,返回值而不是包含它的行。
获取包含一个时间戳的单个元素数据帧。如果没有时区iloc按预期运行......
import dateutil.parser as parser
import pandas as pd
a = pd.DataFrame({'A':[parser.parse('2018-05-01T12:00:00')]})
a.iloc[0]['A']
如果有某个时区iloc [0]返回实际时间戳而不是包含它的行,导致[' A']尝试下标时间戳本身......
import dateutil.parser as parser
import pandas as pd
a = pd.DataFrame({'A':[parser.parse('2018-05-01T12:00:00+00:00')]})
a.iloc[0]['A']
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-8-ef1b8153d3ca> in <module>()
1 a = pd.DataFrame({'A':[parser.parse('2018-05-01T12:00:00+00:00')]})
----> 2 a.iloc[0]['A']
TypeError: 'Timestamp' object is not subscriptable
这是一个奇怪的局限于只包含一列的数据帧,添加另一个包含任何内容的列可以恢复iloc的正常行为。
在这种情况下,反转行/列寻址的顺序会导致正确的行为......
a['A'].iloc[0]
非常想把它称为错误。
Windows 7 64位企业版 Python 3.6.3 | Anaconda,Inc。| (默认情况下,2017年10月15日,03:27:45)[MSC v.1900 64位(AMD64)]在win32上 熊猫版0.22 Numpy 1.14.0 Dateutil 2.6.1
linux下的相同行为(redhat) 随着熊猫版本0.20.3 Numpy 1.13.1 Dateutil 2.6.1