熊猫重新索引命令

时间:2013-12-15 07:02:34

标签: python indexing pandas dataframe

* 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的数据丢失?

1 个答案:

答案 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