Pandas的to_dict()方法返回“Timestamp”

18

这有点尴尬...我试图通过给大家提供我的数据集的一个小样本来创建一个良好的可重复pandas示例。我认为使用df.to_dict()应该很简单,但却不起作用。

df2 = df1[['DATE_FILLED','DAYS_SUPPLY']].head(5)
df2['DATE_FILLED'] = pd.to_datetime(df2['DATE_FILLED'])
diction = df2.to_dict()

输出:

{'DATE_FILLED': {0: Timestamp('2016-12-28 00:00:00'),
                 1: Timestamp('2016-12-31 00:00:00'), 
                 2: Timestamp('2016-12-20 00:00:00'), 
                 3: Timestamp('2016-12-21 00:00:00'), 
                 4: Timestamp('2016-12-26 00:00:00')}, 
     'DAYS_SUPPLY': {0: 14, 1: 14, 2: 14, 3: 7, 4: 7}}

但如果社区使用以下文本将其转换为数据框:

但如果社区通过使用文本将其转换为数据帧:

import pandas as pd
from datetime import datetime
import time
d= pd.DataFrame({'DATE_FILLED': [Timestamp('2016-12-28 00:00:00'), Timestamp('2016-12-31 00:00:00'), Timestamp('2016-12-20 00:00:00'), Timestamp('2016-12-21 00:00:00'), Timestamp('2016-12-26 00:00:00')], 'DAYS_SUPPLY': [14, 14, 14, 7, 7]})

他们会得到 NameError: name 'Timestamp' is not defined

我尝试了导入各种东西,甚至尝试使用 pd.to_dict() 中不同的 orients 进行实验。

如何将 Timestamps 转换或者更好地从中创建 DataFrame?

3个回答

30
您需要从pandas导入Timestamp
>>> import pandas as pd
>>> from pandas import Timestamp
>>> d= pd.DataFrame({'DATE_FILLED': [Timestamp('2016-12-28 00:00:00'), Timestamp('2016-12-31 00:00:00'), Timestamp('2016-12-20 00:00:00'), Timestamp('2016-12-21 00:00:00'), Timestamp('2016-12-26 00:00:00')], 'DAYS_SUPPLY': [14, 14, 14, 7, 7]})
>>>
>>> d
  DATE_FILLED  DAYS_SUPPLY
0  2016-12-28           14
1  2016-12-31           14
2  2016-12-20           14
3  2016-12-21            7
4  2016-12-26            7
>>>

在未来,您始终可以使用内省来给您提供一个很好的提示:

>>> ts = d.to_dict()['DATE_FILLED'][0]
>>> type(ts)
<class 'pandas.tslib.Timestamp'>
>>> from pandas.tslib import Timestamp

如果有多个键具有时间戳,该怎么办? - Devang Hingu

8
您只需要导入时间戳即可:

import Timestamp:

from pandas import Timestamp

d = {'DATE_FILLED': {0: Timestamp('2016-12-28 00:00:00'),
                 1: Timestamp('2016-12-31 00:00:00'), 
                 2: Timestamp('2016-12-20 00:00:00'), 
                 3: Timestamp('2016-12-21 00:00:00'), 
                 4: Timestamp('2016-12-26 00:00:00')}, 
     'DAYS_SUPPLY': {0: 14, 1: 14, 2: 14, 3: 7, 4: 7}}



pd.DataFrame(d)
Out: 
  DATE_FILLED  DAYS_SUPPLY
0  2016-12-28           14
1  2016-12-31           14
2  2016-12-20           14
3  2016-12-21            7
4  2016-12-26            7

1
打败我17秒! - juanpa.arrivillaga
2
不要再发一条内容相同的第三个回答了...我会选择点赞的;-) 很高兴看到你在回答问题。 - piRSquared
我知道这很简单... 但是文档中根本找不到。 - MattR
@ayhan 是的,我在非常相似的情况下遇到了这个问题! - juanpa.arrivillaga
我不是开玩笑...即使知道要搜索什么,我仍然找不到它。我敢问ask.com吗...?有人能找到这个文档吗? - MattR
1
@MattR,请查看我的回答,了解如何通过检查“类型”对象自己轻松发现这一点。 - juanpa.arrivillaga

2
import module语句不会将模块的名称输入全局命名空间,您需要通过module.name来访问它们。如果要将模块的名称输入全局命名空间,您需要使用from module import语法。在这种情况下,可以使用from pandas import Timestamps,将Timestamps输入到全局命名空间中,或者使用from pandas import *,将pandas中的所有名称导入到全局命名空间中。

1
谢谢您的解释!这对将来肯定会有所帮助。 - MattR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接