Pandas系列构造器产生NaN值

2024-09-30 16:36:48 发布

您现在位置:Python中文网/ 问答频道 /正文

当传递字典时,熊猫系列构造函数生成NaN值,其中键是一个元组,其中一个元素作为datetime。代码如下。

奇怪的是,当键是单个日期时间,或者是没有datetime的元组时,它不会发生。

这一行为似乎是在熊猫0.15.0中引入的,因为它在0.14.1中工作正常,但是在发行说明中我找不到任何东西。

我正在Windows上运行64位Python 2.7。

如有任何帮助,不胜感激。

import datetime
import pandas as pd

d = {
    (datetime.date(2016, 5, 1), 'k1'): 1,
    (datetime.date(2016, 5, 2), 'k2'): 2
}

print 'Dictionary:'
print d
print

s = pd.Series(d)
print 'Series:'
print s
print

df = pd.DataFrame(d.values(), index=pd.MultiIndex.from_tuples(d.keys()))
print 'DataFrame:'
print df
print

输出:

^{pr2}$

Tags: 代码import元素dataframedfdatetimedate字典
1条回答
网友
1楼 · 发布于 2024-09-30 16:36:48

太奇怪了!一定是个虫子。在

以下是我的一些实验:

你所做的:

s = pd.Series({(datetime.date(2016, 5, 1), 'k1'): 1,
               (datetime.date(2016, 5, 2), 'k2'): 2})

s

2016-05-01  k1    NaN
2016-05-02  k2    NaN
dtype: float64

实验1:usestrftime返回一个字符串,而不是您想要的。但很管用。在

^{pr2}$

实验二:使用pd.to_datetime。这很管用

s = pd.Series({(pd.to_datetime(datetime.date(2016, 5, 1)).strftime('%Y-%m-%d'), 'k1'): 1,
               (pd.to_datetime(datetime.date(2016, 5, 2)).strftime('%Y-%m-%d'), 'k2'): 2})

s

2016-05-01  k1    1
2016-05-02  k2    2
dtype: int64

实验三:使用pd.Timestamp。这也行得通

s = pd.Series({(pd.Timestamp(datetime.date(2016, 5, 1)), 'k1'): 1,
               (pd. Timestamp(datetime.date(2016, 5, 2)), 'k2'): 2})

s

2016-05-01  k1    1
2016-05-02  k2    2
dtype: int64

相关问题 更多 >