Yoh*_*oth 4 python csv datetime 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)
Run Code Online (Sandbox Code Playgroud)
但它不起作用——日期时间时间没有恢复......
如果我显式创建字典它也不起作用
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
Run Code Online (Sandbox Code Playgroud)
和
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
Run Code Online (Sandbox Code Playgroud)
首先,如果您不必将结果保存为 csv 文件,您可以使用 pandas 方法,例如to_pickle或to_parquet,它将保留列数据类型。
其次,如果您确实想以 csv 格式保存结果并保留其数据类型,那么您可以使用. 为此,您可以更新为:parse_datesread_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))
Run Code Online (Sandbox Code Playgroud)