Pandas Multiindex在read_csv和日期时间对象中不起作用
我在从CSV文件加载数据框时遇到了一个问题,这个数据框有多个日期的多重索引。
我运行了以下代码:
import pandas as pd
import datetime
date1 = datetime.date.today()
date2 = datetime.date.today().replace(month=1)
date_cols=['date1', 'date2']
index = pd.MultiIndex.from_product([[date1],[date2]])
#create dataframe with a single row
df= pd.DataFrame([{'date1':date1, 'date2':date2, 'a':1, 'b':2}])
df.set_index(date_cols, inplace=True)
#print the single row -> correct
print df.loc[index]
# write to csv and load it again
df.to_csv('df.csv')
dfr = pd.read_csv('df.csv', parse_dates=date_cols, dayfirst=True)
dfr.set_index(date_cols, inplace=True)
# print the single row -> incorrect, shows nan,
print dfr.loc[index]
我本来期待能得到相同的输出,也就是数据框中的那一行,但第二个打印语句却显示了nan,因为索引不在数据框里。当我查看df.index时,我发现多重索引对象包含了两个日期,但现在还包含了时间信息,时间是00:00:00。
这是个bug吗?
1 个回答
1
你所做的事情有一些微妙的不同。
In [31]: df.index.levels[0]
Out[31]: Index([2014-07-31], dtype='object')
In [32]: dfr.index.levels[0]
Out[32]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-07-31]
Length: 1, Freq: None, Timezone: None
最开始的创建(使用 MultiIndex.from_product
)是用的 datetimes
。在创建多重索引的时候,我想这可能会导致自动生成一个 DatetimeIndex,而不是一个普通的 datetimes
索引。
当你把数据读回来时,会创建一个合适的 DatetimeIndex
。我会开一个问题来考虑这个情况。可以在 这里查看。