Pandas Multiindex在read_csv和日期时间对象中不起作用

1 投票
1 回答
573 浏览
提问于 2025-04-18 15:30

我在从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。我会开一个问题来考虑这个情况。可以在 这里查看。

撰写回答