Python 在csv中正确保存和加载数据帧,同时保留datetimeindex的频率
我试图保存一个数据帧并加载它。如果我打印出结果df,我看到它们(几乎)是相同的。但是datetimeindex的freq属性没有保留 我的代码如下所示Python 在csv中正确保存和加载数据帧,同时保留datetimeindex的频率,python,pandas,csv,Python,Pandas,Csv,我试图保存一个数据帧并加载它。如果我打印出结果df,我看到它们(几乎)是相同的。但是datetimeindex的freq属性没有保留 我的代码如下所示 import datetime import os import numpy as np import pandas as pd def test_load_pandas_dataframe(): idx = pd.date_range(start=datetime.datetime.now(),
import datetime
import os
import numpy as np
import pandas as pd
def test_load_pandas_dataframe():
idx = pd.date_range(start=datetime.datetime.now(),
end=(datetime.datetime.now()
+ datetime.timedelta(hours=3)),
freq='10min')
a = pd.DataFrame(np.arange(2*len(idx)).reshape((len(idx), 2)), index=idx,
columns=['first', 2])
a.to_csv('test_df')
b = load_pandas_dataframe('test_df')
os.remove('test_df')
assert np.all(b == a)
def load_pandas_dataframe(filename):
'''Correcty loads dataframe but freq is not maintained'''
df = pd.read_csv(filename, index_col=0,
parse_dates=True)
return df
if __name__ == '__main__':
test_load_pandas_dataframe()
我得到以下错误:
ValueError: Can only compare identically-labeled DataFrame objects
这对我的程序来说不是一个大问题,但仍然很烦人。
谢谢 这里的问题是您保存的数据帧有列
索引(['first',2],dtype='object')
但是您加载的数据帧具有列
索引(['first','2',dtype='object')
换句话说,原始数据帧的列具有整数2
,但在使用将其保存到_csv
并使用读取_csv
将其加载回时,它被解析为字符串'2'
通过断言的最简单修复方法是将第13行更改为:
columns=['first', '2'])
为了补充@jfaccioni answer,
freq
属性没有保留,这里有两个选项
快速制作一种简单的泡菜,可以保存所有东西:
a.to_pickle('test_df')
b = pd.read_pickle('test_df')
a.equals(b) # True
或者,您可以使用DatetimeIndex中的推断\u freq
属性:
a.to_csv('test_df')
b.read_csv('test_df')
b.index.freq = b.index.inferred_freq
print(b.index.freq) #<10 * Minutes>
a.to_csv('test_df'))
b、 读取csv(“测试df”)
b、 index.freq=b.index.freq
打印(b.索引频率)#
Hi,欢迎来到StackOverflow。哪一行正在报告错误?