Pandas преобразует строковое значение JSON в INT

#json #pandas

#json #pandas

Вопрос:

У меня есть список объектов в формате JSON. Каждый объект имеет два свойства: id(строка) и arg(число).

Когда я использую pandas.read_json(...) , результирующий фрейм данных также интерпретирует идентификатор как число, что вызывает проблемы, поскольку информация теряется.

 import pandas as pd

json = '[{ "id" : "1", "arg": 1 },{ "id" : "1_1", "arg": 2}, { "id" : "11", "arg": 2}]'

df = pd.read_json(json)
 

Я бы ожидал, что у меня будет такой фрейм данных:

      id     arg  
0   "1"      1
1   "1_1"    2
2   "11"     2
 

Я получаю

      id     arg  
0     1      1
1    11      2
2    11      2
 

и внезапно, когда-то уникальный идентификатор больше не так уникален.

Как я могу сказать pandas прекратить это делать?

Мой поиск до сих пор давал результаты только там, где люди пытались достичь противоположного — иметь столбцы строки, интерпретируемые как числа. Я совершенно не хочу достигать этого в этом случае!

Ответ №1:

Используйте dtype параметр для предотвращения преобразования id в числа:

 df = pd.read_json(json, dtype={'id':str})

print (df)
    id  arg
0    1    1
1  1_1    2
2   11    2


print (df.dtypes)
id     object
arg     int64
dtype: object
 

Ответ №2:

Если вы установите dtype для параметра значение False , read_json типы не будут выводиться автоматически:

 df = pd.read_json(json, dtype=False)