Pandas: read_json () elimina el subrayado y convierte la cadena en entero cuando solo están presentes los números y el subrayado

Creado en 14 oct. 2017  ·  3Comentarios  ·  Fuente: pandas-dev/pandas

Muestra de código

import pandas as pd

df = pd.DataFrame({'test': ['34343_43434']})
json = df.to_json(orient='records')
result = pd.read_json(json, orient='records')
print(result)

producción:
prueba
0 3434343434

Descripción del problema

Pandas parece estar convirtiendo la cadena inicial ("34343_43434") en un número entero (3434343434) y quita el guión bajo para hacerlo.

Esto solo ocurre cuando todos los caracteres de la cadena (además del guión bajo) son números enteros. Por ejemplo, si el valor inicial fuera "34343_43434X", la salida sería correctamente "34343_43434X". Este problema no ocurre cuando dtypes = False.

Rendimiento esperado

test

0 34343_43434

Salida de pd.show_versions()

[pegue el resultado de pd.show_versions() aquí debajo de esta línea]

VERSIONES INSTALADAS

cometer: Ninguno
python: 3.6.1.final.0
bits de pitón: 64
SO: Windows
Versión del SO: 10
máquina: AMD64
Procesador: Intel64 Family 6 Model 78 Stepping 3, GenuineIntel
byteorder: pequeño
LC_ALL: Ninguno
IDIOMA: Ninguno
LOCALE: Ninguno Ninguno

pandas: 0.20.3
pytest: 3.0.7
pip: 9.0.1
herramientas de configuración: 27.2.0
Cython: 0.25.2
numpy: 1.12.1
scipy: 0.19.0
xarray: Ninguno
IPython: 5.3.0
esfinge: 1.5.6
chivo expiatorio: 0.4.1
dateutil: 2.6.0
pytz: 2017.2
blosc: Ninguno
cuello de botella: 1.2.1
tablas: 3.2.2
numexpr: 2.6.2
pluma: ninguna
matplotlib: 2.0.2
openpyxl: 2.4.7
xlrd: 1.0.0
xlwt: 1.2.0
xlsxwriter: 0.9.6
lxml: 3.7.3
bs4: 4.6.0
html5lib: 0.999
sqlalchemy: 1.1.9
pymysql: Ninguno
psycopg2: Ninguno
jinja2: 2.9.6
s3fs: Ninguno
pandas_gbq: Ninguno
pandas_datareader: Ninguno

Compat IO JSON

Todos 3 comentarios

Pude replicar esto en Python 3.6.2 pero no en 3.5.3. Aunque no estoy seguro de por qué

Puede estar relacionado con PEP 515

Puedo hacer cosas como esta en 3.6, pero no en 3.5

In [5]: num = 34343_43434

In [6]: type(num)
Out[6]: int

In [7]: num
Out[7]: 3434343434

este es un efecto secundario desafortunado del pep, pero me parece válido.

¿Fue útil esta página
0 / 5 - 0 calificaciones