强制熊猫将类型信息存储在输出文件中

时间:2019-09-17 10:45:54

标签: python json pandas

我正在处理应该推送到外部Web服务的数据集。该端点非常严格地验证收到的JSON。尽管pandas处理类型比其应有的自由得多。

例如,我需要将整数值作为文本值推送到Web服务。即使将值正确地序列化为stringJSON(带有引号),在读回时,pandas也会将其魔术地转换为整数。

有什么办法解决吗?强制熊猫在输出文件中存储列类型?还是在读取数据时更严格?

也许其他任何格式都可以更好地存储此类数据?任何线索将不胜感激!

2 个答案:

答案 0 :(得分:1)

您可以在读取数据时强制执行dtypes

示例:考虑以下名为t.json的JSON文件:

{
  "Strings": {
    "A": "1",
    "B": "2"
  },
  "Integers": {
    "A": 3,
    "B": 4
  }
}

您可以读取数据,并在dict中指定类型:

df = pd.read_json('t.json', dtype={'Strings': str, 'Integers': str})

这将为您提供以下数据框:

    Strings Integers
  A       1        3
  B       2        4

df.dtypes为您提供:

Strings     object
Integers    object
dtype: object

答案 1 :(得分:0)

如果没有明确要求使用JSONCSV,也可以使用其他更高级的格式来存储数据。

根据{{​​3}},

Feather似乎是最先进的,但是我在将其投放到32-bit版的python时遇到了问题。因此,我最后进行了comparison article序列化。开箱即用的熊猫支持。与初始代码相比,它只花了我一点点钱:

# Dumping dataframe information to pickle file
df.to_pickle(path)

# Reading datafreame information from pickle file
df = pandas.read_pickle(path)

类型保持不变。