【发布时间】:2016-09-20 20:40:36
【问题描述】:
Pandas Series 构造函数在传递字典时生成 NaN 值,其中键是元组,其中一个元素作为日期时间。代码如下。
奇怪的是,当键是单个日期时间或没有日期时间的元组时,它不会发生。
似乎这种行为是在 pandas 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
输出:
Dictionary:
{(datetime.date(2016, 5, 1), 'k1'): 1, (datetime.date(2016, 5, 2), 'k2'): 2}
Series:
2016-05-01 k1 NaN
2016-05-02 k2 NaN
dtype: float64
DataFrame:
0
2016-05-01 k1 1
2016-05-02 k2 2
【问题讨论】:
-
是的,这很奇怪。使用
datetime.date时,我的行为与您相同,但如果我改用datetime.datetime,它的工作方式与所写的一样。如果您查看NaN输出中的索引,pandas 为每个日期添加了一个时间组件。也许它在进行转换时存在错误? -
iirc 这已在 0.18.0 中修复(也可能在 0.17.1 中)
-
@Jeff 我正在使用 0.18.1 并且看到相同的行为。
-
好吧
datetime.date不是一流的类型,所以无论如何都不会修复。没有理由使用它。如果您愿意,可以在问题跟踪器上提出请求并使用拉取请求进行修复。 -
@root 是正确的,包括从 0.15.0 到 0.18.1 的每个版本都显示此行为。
标签: python datetime pandas nan series