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
答案 0 :(得分:1)
这很奇怪!必须是一个错误。
以下是我的一些实验:
你做了什么:
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:使用strftime
返回一个字符串,而不是你想要的字符串。但是有效。
s = pd.Series({(datetime.date(2016, 5, 1).strftime('%Y-%m-%d'), 'k1'): 1,
(datetime.date(2016, 5, 2).strftime('%Y-%m-%d'), 'k2'): 2})
s
2016-05-01 k1 1
2016-05-02 k2 2
dtype: int64
实验#2:使用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
实验#3:使用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