Python 3.x 函数的作用是:更改默认的日期时间格式值

Python 3.x 函数的作用是:更改默认的日期时间格式值,python-3.x,pandas,python-datetime,sklearn-pandas,Python 3.x,Pandas,Python Datetime,Sklearn Pandas,假设我有一个数据框,它有这样的日期值,它是pandas对象数据类型 当我应用get_date函数时,它的值被更改为datetime格式 当我使用unique时,值保持不变 但是,当我使用unique并将其转换为list时,它会更改默认值/原始值 .apply(get_date)函数如下所示 如果检查: 返回 ndarray或ExtensionArray 作为NumPy数组返回的唯一值。见附注 因此,如果添加tolist它用于查看本机日期时间格式的numpy数组: rng = pd.date

假设我有一个数据框,它有这样的日期值,它是pandas对象数据类型

当我应用get_date函数时,它的值被更改为datetime格式

当我使用unique时,值保持不变

但是,当我使用unique并将其转换为list时,它会更改默认值/原始值

.apply(get_date)函数如下所示

如果检查:

返回
ndarray或ExtensionArray
作为NumPy数组返回的唯一值。见附注

因此,如果添加
tolist
它用于查看本机日期时间格式的numpy数组:

rng = pd.date_range('2017-04-03', periods=3)
a = pd.DataFrame({'DATEDATACHANGED': rng.append(rng) })  
print (a)
  DATEDATACHANGED
0      2017-04-03
1      2017-04-04
2      2017-04-05
3      2017-04-03
4      2017-04-04
5      2017-04-05

print (a['DATEDATACHANGED'].unique())
['2017-04-03T00:00:00.000000000' '2017-04-04T00:00:00.000000000'
 '2017-04-05T00:00:00.000000000']

print (a['DATEDATACHANGED'].unique().tolist())
[1491177600000000000, 1491264000000000000, 1491350400000000000]
如果要将系列转换为列表,请使用:

对于唯一值,添加:


我仍然不明白,为什么.tolist()函数会将其更改为不同的值。解决方案是先将列表转换为列表,然后删除重复项。我的问题是,为什么它对datetime的工作方式不同,但对其他数据类型的工作方式却很好。@CodeRed-因为在numpy中,如果将datetime转换为list get unix格式,那么以这种方式实现的原因更适合numpy开发人员,您可以问
print (a['DATEDATACHANGED'].tolist())
[Timestamp('2017-04-03 00:00:00'), Timestamp('2017-04-04 00:00:00'), 
 Timestamp('2017-04-05 00:00:00'), Timestamp('2017-04-03 00:00:00'), 
 Timestamp('2017-04-04 00:00:00'), Timestamp('2017-04-05 00:00:00')]
print (a['DATEDATACHANGED'].drop_duplicates().tolist())
[Timestamp('2017-04-03 00:00:00'), Timestamp('2017-04-04 00:00:00'), 
 Timestamp('2017-04-05 00:00:00')]