python - 保存保存为 csv 的 pandas 数据帧的数据类型
问题描述
我希望能够为我的 df 保存 dtypes,当我下次阅读 csv 时,我想证明一个 dtypes 数组。
我尝试了以下方法:
types_dic = df.dtypes.to_dict()
np.save("dtypes.npy", types_dic, allow_pickle=True)
dtyp = np.load("dtypes.npy", allow_pickle=True)
df2 = pd.read_csv(join(folder_no_extension, file), dtype=dtyp)
但它不起作用--datetime时间没有恢复......
如果我明确创建字典,它也不起作用
types_dic = {}
for t in df.dtypes:
types_dic[t] = str(df.dtypes[t])
df.dtypes
BN object
School_Year datetime64[ns]
Start_Date datetime64[ns]
Overall_Rating object
Indicator_1.1 object
Indicator_1.2 object
Indicator_1.3 object
Indicator_1.4 object
和
df2.dtypes
BN object
School_Year object
Start_Date object
Overall_Rating object
Indicator_1.1 object
Indicator_1.2 object
Indicator_1.3 object
Indicator_1.4 object
解决方案
首先,如果您不必将结果保存为 csv 文件,则可以改用 pandas 方法,如to_pickle
orto_parquet
将保留列数据类型。
其次,如果您确实想将结果保存为 csv格式并保留它们的数据类型,那么您可以parse_dates
使用read_csv
. 为此,您可以更新为:
# Save non-date dtypes
non_date_dict = df.dtypes[df.dtypes != '<M8[ns]'].to_dict()
np.save("non_date_dict.npy", non_date_dict, allow_pickle=True)
non_date_dict2 = np.load("non_date_dict.npy", allow_pickle=True)
# Save date dtypes
date_col_list = list(df.dtypes[df.dtypes == '<M8[ns]'].index)
np.save("date_col_list.npy", date_col_list, allow_pickle=True)
date_col_list2 = np.load("date_col_list.npy", allow_pickle=True)
# Load
df2 = pd.read_csv('pandas_dtypes.csv',
dtype=non_date_dict2,
parse_dates=list(date_col_list2))
推荐阅读
- delphi - 如何根据服务器端绘制的区域在远程屏幕(客户端)上的两个表单中制作相同的孔?
- watson-iot - 不接收来自 wiotp
- html - 使 html 表格元素响应水平滚动
- python - 在不是障碍的网格中找到最接近目标可用单元格,并且尽可能靠近起始单元格?
- android - json不显示印地语文本
- python - 在 python 2 中将 int 时间戳转换为日期时间时遇到问题
- python - Django admin,无法创建超级用户并使用自定义用户模型登录
- c# - MongoDB TTL 索引正在删除文档,但未更新使用情况
- angular - 如何在 ag-Grid Angular 设置中访问 columnDefs 中另一列的值?
- r - 如何排列两个热图的色标(plot3D 包中的 image2D 函数)?