我的工作流程通常涉及将一些数据(通常是CSV文件中的数据)加载到pandas数据框中,进行清理,定义每列的正确数据类型,然后将其导出到SQL Server。
对于这些情况当没有SQL Server时,有什么好的替代方法来存储每一列的清除数据和数据类型的显式定义?
羽毛,HDF5和镶木地板如何?熊猫supports them,但我对这些格式了解不多。不建议我长期阅读羽毛(因为API可能会更改?不清楚)
我不确定是否要使用泡菜:我知道这不是一种安全的格式,并且API不断变化并向后破坏 兼容性
CSV并不是真正的选择,因为推断数据的数据类型通常是一场噩梦;在将数据读回大熊猫时,我需要明确声明格式,包括日期格式,否则:
更新:根据HDF5最快的格式,这是一个有趣的比较:https://medium.com/@bobhaffner/gist-to-medium-test-db3d51b8ba7b
我似乎理解HDF5和Parquet之间的另一个区别是datetime64在Hdf5中没有直接等效项。大多数人似乎将其日期以ISO日期格式的(yyyy-mm-dd)字符串存储在HDF5中。
答案 0 :(得分:1)
如果您真的想避免泡菜并保存CSV(我不完全同意您关于那些不可行选项的声明),则可以运行本地数据库服务器以将数据保存在其中并进行转储/恢复SQL Server再次可用时进行处理。否则:
使用DataFrame
对象的to_pickle
方法。
或者,将数据类型的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)
答案 1 :(得分:1)
如果您的数据是二维表并且用于Apache Spark之类的Bigdata处理,请使用镶木地板。如前所述,HDF5不适用于处理日期/时间。
如果您的数据具有3个或更多维度,HDF5将是一个不错的选择-特别是对于长期归档,可移植性和共享。
如果性能很重要,Apache Feather最快。