我的工作流程通常涉及将一些数据(通常是CSV文件中的数据)加载到pandas数据框中,进行清理,定义每列的正确数据类型,然后将其导出到SQL Server。
对于那些无法使用SQL Server的情况,有什么好的替代方法来存储清除的数据以及每列的数据类型的显式定义?
我测试过的唯一真正的解决方案是导出到sqlite .db
文件,使用答案here来确保将日期读取为
日期。
羽毛,HDF5和镶木地板怎么样?熊猫supports them,但我对这些格式了解不多。我不建议长期阅读羽毛,因为API可能会更改?不清楚
我不确定使用pickle:我知道这不是一种安全格式,并且API会不断变化并向后破坏
兼容性
CSV并不是真正的选择,因为在我的数据上推断数据类型通常是一场噩梦。当将数据读回熊猫时,我需要显式声明格式,包括日期格式,否则:
大熊猫可以创建列,其中一行为dd-mm-yyyy,另一行为mm-dd-yyyy(请参见here)。加
我有很多文本列,其中前10k行似乎是数字,而后100行是文本,因此大多数软件会推断该列是数字,然后导入失败。也许我需要创建一个函数来导出带有所有数据类型定义,日期格式等的辅助文件?可行但麻烦。
更新:这是一个有趣的比较,根据HDF5是最快的格式:https://medium.com/@bobhaffner/gist-to-medium-test-db3d51b8ba7b
我似乎理解HDF5和Parquet之间的另一个区别是datetime64在Hdf5中没有直接等效项。大多数人似乎将其日期以ISO日期格式(yyyy-mm-dd)字符串存储在HDF5中。
最佳答案
如果您真的想避免泡菜并保存CSV(我不完全同意您关于那些不可行的选择的声明),则可以运行本地数据库服务器来保存数据,并在转储时执行转储/还原过程。 SQL服务器再次可用。除此以外:
使用to_pickle
对象的DataFrame
方法。
或者,将数据类型json文件与您的数据类型一起保存,并在保存CSV时指定日期格式:
# export
import json
data_types = df.dtypes.astype(str).to_dict()
with open('data_type_key.json', 'w') as f
json.dump(data_types, f)
df.to_csv('data.csv', date_format='%Y%m%d')
# import
data_types = json.loads('data_type_key.json')
data_frame = pd.read_csv(your_csv_path, dtype=data_types)