当我有一个包含多个日期的多索引时,我在从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]
虽然我希望获得相同的输出,即数据帧中的单行, 第二个print语句打印出nan,因为索引不在数据帧中。 运行df.index时,我看到multiindex对象包含两个日期,但现在还保存时间信息,时间是00:00:00
这是一个错误吗?
答案 0 :(得分: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,而不是{{1}的Index
}}
当创建适当的datetimes
时,将其读回。我会打开一个问题来思考这个问题。见here