我正在处理应该推送到外部Web服务的数据集。该端点非常严格地验证收到的JSON
。尽管pandas
处理类型比其应有的自由得多。
例如,我需要将整数值作为文本值推送到Web服务。即使将值正确地序列化为string
到JSON
(带有引号),在读回时,pandas
也会将其魔术地转换为整数。
有什么办法解决吗?强制熊猫在输出文件中存储列类型?还是在读取数据时更严格?
也许其他任何格式都可以更好地存储此类数据?任何线索将不胜感激!
答案 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)
如果没有明确要求使用JSON
或CSV
,也可以使用其他更高级的格式来存储数据。
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)
类型保持不变。