2017-03-16 114 views
2

嗯,这是令人尴尬的......我试图创建一个good reproducible pandas example给你们一个小样本我的数据集。我认为这将是简单的df.to_dict(),但无济于事。大熊猫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?

回答

9

您需要导入Timestamppandas

>>> 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 
5

你只需要导入时间戳:

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秒! –

+2

而不是第三个具有相同内容的答案...我会坚持upvoting ;-)很高兴看到你回答问题。 – piRSquared

+0

我知道这是这个简单的...无法在文档*任何地方找到* – MattR

2

import module未输入模块名称s到全局命名空间中,您必须通过module.name访问它们。要将模块名称输入到全局名称空间中,您需要使用from module import语法。在这种情况下,要么输入Timestamps到全局命名空间的from pandas import Timestamps,要么from pandas import *,它将pandas中的所有名称导入到全局命名空间。

+1

谢谢你的解释!这对未来肯定有帮助 – MattR