时区天真的 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()
我不太清楚这是一个 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()