时区天真的 pandas 列上的唯一(和其他 numpy 函数)转换为本地时区

unique( and other numpy functions) on timezone naive pandas columns convert to local timezone

我不太清楚这是一个 numpy 错误还是 pandas 错误还是我的用户错误。 谁能给个说明... 我的解决方法是使用字符串来实现唯一性,但我经常 运行 遇到这些问题......并且会重视建议的工作实践(例如始终设置 UTC?)

所以我希望 return 天真的日期时间是独一无二的,而不是解释为本地...

import pandas as pd
d=pd.DataFrame({'a':['2014-10-12','2014-10-11']})
d['b']=pd.to_datetime(d.a)
print d
print d['b'].unique()
print d['b'].max()
print d['b'].values.max()

        a          b
0  2014-10-12 2014-10-12
1  2014-10-11 2014-10-11

['2014-10-12T02:00:00.000000000+0200' '2014-10-11T02:00:00.000000000+0200'] #unique

2014-10-12 00:00:00 # pandas max

2014-10-12T02:00:00.000000000+0200  #numpy max

numpy'1.9.2' pandas '0.16.1'

它们都是相同的 date/time,但函数返回不同的类型,具有不同的字符串表示形式(即不同的 __str____repr__ 输出)。

d['b'].unique()d['b'].values.max() 返回 numpy.datetime64 个对象,而 d['b'].max() 返回一个 pandas.Timestamp 个对象。 numpy.datetime64 以字符串形式输出时使用系统的语言环境设置时区,而 pandas.Timestamp 则不使用。

如果将 pandas.Timestamp 转换为 numpy.datetime64,您会发现它们是相同的值:

np.datetime64(d['b'].max().to_datetime()) == d['b'].values.max()