#python #pandas
Вопрос:
Я нашел вывод типа Панды полной болью в спине, но, короче говоря, как мне сохранить значения в виде строк и не изменять их при чтении JSON с lines=True
помощью ?
>>> df = pd.DataFrame({'A': ['01','02','03'], 'B': [True, False, False], 'C': ['a', 'b', 'c']}, dtype=str)
>>> df
A B C
0 01 True a
1 02 False b
2 03 False c
>>> df.to_json(open('1.json', 'w'), orient='records', lines=True)
>>> pd.read_json('1.json', lines=True)
A B C
0 1 True a
1 2 False b
2 3 False c
Вы можете видеть, что начальные нули удалены из столбца A
.
Я работаю в более крупном проекте, где есть много столбцов, которые меня не волнуют, но я не хочу менять их, как A
в приведенной выше колонке.
Как мне это сделать?
Я также не хочу меняться lines=True
, потому что тогда файл станет одной строкой и нечитаемым.
Комментарии:
1. Раньше у меня была та же проблема при записи моих df в csv, одна вещь, которую я делал, состояла в том, чтобы преобразовать их в тип str и записать в csv. Когда я читаю этот csv, я обязательно конвертирую его обратно в исходный тип
2. Нет, подождите, мой плохой, похоже, что ваш ввод уже является str, если затем попробуйте преобразовать его в тип «obj»
Ответ №1:
Используйте dtype={"Col_Name": object}
при чтении json
Экс:
df = pd.DataFrame({'A': ['01','02','03'], 'B': [True, False, False], 'C': ['a', 'b', 'c']}, dtype=str)
df.to_json('1.json', orient='records', lines=True)
print(pd.read_json('1.json', lines=True, dtype={"A": object}))
Выход:
A B C
0 01 True a
1 02 False b
2 03 False c
Комментарии:
1. Спасибо. Поскольку я не знаю имен столбцов, похоже, что настройка
dtype=object
работает для всех столбцов2. Пожалуйста, обратите внимание, что это приведет к преобразованию всех столбцов в «str». Например, если у вас есть столбец
int
, который также будет преобразован вstr
3. Это лучше, чем другой способ, но возможно ли сделать так, чтобы это просто ничего не меняло? В идеале запуск read_json/to_json не изменит файл.