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
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.
test
0 34343_43434
pd.show_versions()
[pegue el resultado de pd.show_versions()
aquí debajo de esta línea]
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
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.