2013-12-15 62 views
0

* RE Add missing dates to pandas dataframe,以前问的问题熊猫重新索引命令

import pandas as pd 
import numpy as np 

idx = pd.date_range('09-01-2013', '09-30-2013') 

df = pd.DataFrame(data = [2,10,5,1], index = ["09-02-2013","09-03-2013","09-06-2013","09-07-2013"], columns = ["Events"]) 

df.index = pd.DatetimeIndex(df.index); #question (1) 

df = df.reindex(idx, fill_value=np.nan) 
print(df) 

在上面的脚本是什么命令指出的问题怎么样呢?如果您将此 命令离开脚本,则该df将被重新编制索引,但原始df的数据部分不会被保留。由于没有参考 DatetimeIndex命令中的df数据,为什么起始df中的数据丢失了?

回答

2

简答题:df.index = pd.DatetimeIndex(df.index);将字符串索引df转换为DatetimeIndex。


您必须区分不同类型的索引。在

df = pd.DataFrame(data = [2,10,5,1], index = ["09-02-2013","09-03-2013","09-06-2013","09-07-2013"], columns = ["Events"]) 

你有一个包含字符串的指数。当使用

df.index = pd.DatetimeIndex(df.index); 

你这跟弦标准指数型转换为指数与日期时间(一DatetimeIndex)。所以这两类指标的价值是完全不同的。

现在,当你与

idx = pd.date_range('09-01-2013', '09-30-2013') 
df = df.reindex(idx) 

其中idx也是指数与日期时间重新编制。当您使用字符串索引重新索引原始df时,没有匹配的索引值,因此原始df的列值不会被保留。当您将第二个df(将索引转换为日期时间索引之后)重新索引时,将会有匹配的索引值,因此这些索引中的列值将保留。

另请参见http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.reindex.html