[英]Pandas DataFrame .attrs is not saved when saving dataframe with to_csv method
[英]Saving data types for a pandas dataframe saved as a csv
我希望能夠為我的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)
但這不起作用-無法恢復日期時間...
如果我顯式創建字典,它也不起作用
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文件,則可以使用to_pickle
或to_parquet
類的pandas方法來保留列數據類型。
其次, 如果你想保存結果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))
我將回答對我有用的東西。 它可能不是最漂亮的解決方案,但它可以工作。 還可以幫助某人
import json
...
dic = {}
for t in df.dtypes.to_dict():
dic[t] = str(df.dtypes[t])
with open('dtypes.json', 'w') as fp:
json.dump(dic, fp)
with open('dtypes.json', 'r') as fp:
dtyp = json.load(fp)
dic = {}
dates = []
for t in dtyp:
if "object" in str(dtyp[t]):
atype = np.str
elif "float" in str(dtyp[t]):
atype = np.float_
elif "datetime" in str(dtyp[t]):
atype = np.str
dates.append(t)
else:
atype = np.int_
dic[t] = atype
df2 = pd.read_csv(path, dtype=dic, parse_dates=dates)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.