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 groupby并将某些列保存到CSV [重复]
从 csv 和训练中删除重复数据(Keras、python、pandas)
pandas使用read_csv函数读取文件时指定数据列的数据类型pandas使用read_csv函数读取文件时通过keep_default_na参数设置缺失值替换为空字符串