提问者:小点点

在保留数据类型的同时导出熊猫数据框的格式是什么?不是CSV;Sqlite?Parquet?


我的工作流程通常包括将一些数据(通常来自CSV文件)加载到熊猫数据框中,对其进行清理,为每列定义正确的数据类型,然后将其导出到SQL服务器。

对于那些SQL服务器不可用的情况,有什么好的替代方案来存储清理后的数据和每个列的数据类型的显式定义?

>

  • 我测试过的唯一真正的解决方案是导出到sqlite. db文件,使用此处的答案来确保日期被读取为日期。
  • 羽毛、HDF5、Parquet怎么样?熊猫支持但对这些格式不太了解,看过羽毛不建议长期存放(因为API可能会变?不清楚)

    我不确定使用泡菜:我知道这不是一个安全的格式,API不断变化,打破向后兼容

    CSV不是一个真正的选择,因为在我的数据上推断数据类型通常是一场噩梦;当将数据读回熊猫时,我需要明确声明格式,包括日期格式,否则:

    • 熊猫可以创建一行是dd-mm-yyyy,另一行是mm-dd-yyyy的列(见这里)。加
    • 我有许多文本列,其中前10k行似乎是数字,接下来的100是文本,所以大多数软件会推断该列是数字,然后导入失败。也许我需要创建一个函数来导出包含所有数据类型定义、日期格式等的辅助文件?可行但繁琐。

    更新:这是一个有趣的比较,根据HDF5是最快的格式:https://medium.com/@bobhaffner/gist-to-media-test-db3d51b8ba7b

    我似乎明白HDF5和Parquet的另一个区别是datetime64在Hdf5中没有直接的等价物。大多数人似乎将他们的日期存储在HDF5中作为ISO日期格式的(yyyy-mm-dd)字符串。


  • 共2个答案

    匿名用户

    如果您的数据是二维表并且用于Apache Spark等Bigdata处理,请使用parquet。HDF5不适合处理您提到的日期/时间。

    如果您的数据有3个或更多维度,HDF5将是一个不错的选择——尤其是对于长期存档、可移植性和共享。

    如果性能很重要,Apache Feather是最快的。

    匿名用户

    如果你真的想避免泡菜和保存CSV(我不完全同意你关于这些不可行选项的陈述),那么你可以运行本地数据库服务器来保存数据,并在SQL服务器再次可用时执行转储/恢复过程。否则:

    使用to_pickleDataFrame对象的方法。

    或者,使用您的数据类型保存数据类型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)