首页 > 解决方案 > 保存保存为 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

标签: pythonpandascsvdatetime

解决方案


首先,如果您不必将结果保存为 csv 文件,则可以改用 pandas 方法,如to_pickleorto_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))

推荐阅读