我正在使用Pandas和SQL Alchemy从SQL导入数据。 SQL列之一是datetime。然后,我将SQL数据隐藏到Pandas数据帧中,datetime列为“ datetime64” –很好。我可以使用Matplotlib针对日期时间绘制其他任何列。 然后,我使用以下命令将pandas数据框转换为csv:
df.to_csv('filename')
这是为了避免我每次登录时都必须继续运行相当大的SQL查询。如果我然后尝试将csv读回python并从中工作,则现在数据类型为“对象”而不是“ datetime64”的datetime列。这意味着Matplotlib不允许我针对datetime绘制其他列,因为datetime列的数据类型错误。
如何确保从df到csv的过程中它保持正确的数据类型?
编辑:
我对原始帖子的评论/解决方案确实有助于将列设置为正确的dtype。但是我现在有一个不同的问题。当我针对“ datetime”列进行绘制时,如下所示:
应该看起来像这样(这是我直接使用SQL数据时的样子)。
我认为datetime列仍然不是正确的dtype(即使它声明它是datetime64 [ns]。
答案 0 :(得分:1)
CSV是纯文本格式,不指定任何列的数据类型。如果您使用熊猫将csv读回到python,则pd.read_csv()提供了几种方法来指定列代表日期。 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
尝试pd.read_csv(file.csv, parse_dates=[<colnum>])
,其中colnum
是日期列的整数索引。
read_csv()提供了用于解析日期的其他选项。或者,您可以使用'dtypes'arg。
答案 1 :(得分:-1)
很遗憾,您不能以CSV格式存储数据类型。
如果仅使用python读取文件,您可以做的一件事就是使用pickle
您可以这样做:
import pickle
with open('filename.pkl', 'wb') as pickle_file:
pickle.dump(your_csv_file, pickle_file)
您可以使用
加载它with open('filename.pkl', 'rb') as pkl_file:
csv_file = pickle.load(pkl_file)