* 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不会被保留。因为没有参考中的df数据 DatetimeIndex命令,为什么来自起始df的数据丢失?
答案 0 :(得分: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
(在将索引转换为日期时间索引之后)时,将存在匹配的索引值,因此将保留这些indix上的列值。
另见http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.reindex.html