gpt4 book ai didi

python - Pandas Series 构造函数生成 NaN 值

转载 作者:太空宇宙 更新时间:2023-11-03 16:33:45 26 4
gpt4 key购买 nike

当传递一个字典时,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

最佳答案

这太奇怪了!一定是一个错误。

以下是我的一些实验:

你做了什么:

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

关于python - Pandas Series 构造函数生成 NaN 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37399927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com