Pandas 到 CSV 列数据类型 [重复]

Posted

技术标签:

【中文标题】Pandas 到 CSV 列数据类型 [重复]【英文标题】:Pandas to CSV column datatype [duplicate] 【发布时间】:2020-11-12 10:17:42 【问题描述】:

我正在使用 Pandas 和 SQL Alchemy 从 SQL 导入数据。 SQL 列之一是日期时间。然后我将 SQL 数据转换为 Pandas 数据框,日期时间列是“datetime64”——这很好。我可以使用 Matplotlib 根据日期时间绘制我的任何其他列。 然后,我使用以下方法将我的 pandas 数据框转换为 csv:

 df.to_csv('filename')

这是为了节省我每次登录时都必须继续运行相当大的 sql 查询。如果我然后尝试将csv读回python并从中工作,那么现在数据类型为“object”而不是“datetime64”的日期时间列。这意味着 Matplotlib 不会让我根据 datetime 绘制其他列,因为 datetime 列是错误的数据类型。

如何确保它在 df 到 csv 过程中保持正确的数据类型?

编辑:

我原来的帖子的 cmets/solutions 确实使列具有正确的 dtype。但是我现在有一个不同的问题。当我对“日期时间”列进行绘图时,如下所示:

什么时候应该是这个样子(这是我直接处理 SQL 数据时的样子)。

我假设 datetime 列仍然不是正确的 dtype(即使它声明它是 datetime64[ns]。

【问题讨论】:

您是否尝试将列转换为日期时间格式pandas.pydata.org/pandas-docs/stable/reference/api/…? 如前所述,csv 格式不具备存储数据类型的能力。您的选择是选择能够存储 dtype 的不同文件类型,或者如副本所示,在使用 .read_csv() 读取文件时指定要解析为日期时间的列。 从你的图表看,只有每个月前三分之一左右的数据是混乱的。这可能是因为这些日期以 dd-mm-yyyy 格式写入 CSV,而 pandas(或者实际上是 pandas 使用的 C++ 库)默认为 mm-dd-yyyy。尝试使用pd.read_csv(...., dayfirst=True) 再次解析。 你的数据框是按Datetime排序的吗? 【参考方案1】:

CSV 是纯文本格式,不指定任何列的数据类型。如果您使用 pandas 将 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”参数。

【讨论】:

【参考方案2】:

很遗憾,您不能以 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)

【讨论】:

以上是关于Pandas 到 CSV 列数据类型 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

详解pandas的read_csv()

Pandas groupby并将某些列保存到CSV [重复]

从 csv 和训练中删除重复数据(Keras、python、pandas)

使用 pandas 读取 csv 时设置列类型

pandas使用read_csv函数读取文件时指定数据列的数据类型pandas使用read_csv函数读取文件时通过keep_default_na参数设置缺失值替换为空字符串

Python Pandas——Read_csv详解