Pandas: read_json () supprime le trait de soulignement et convertit la chaîne en entier lorsque seuls les nombres et le trait de soulignement sont présents

Créé le 14 oct. 2017  ·  3Commentaires  ·  Source: pandas-dev/pandas

Exemple de code

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)

sortir:
test
0 3434343434

Description du problème

Pandas semble convertir la chaîne initiale ("34343_43434") en un entier (3434343434) et supprime le trait de soulignement pour le faire.

Cela se produit uniquement lorsque tous les caractères de la chaîne (à part le trait de soulignement) sont des entiers. Par exemple, si la valeur initiale était "34343_43434X", la sortie serait alors correctement "34343_43434X". Ce problème ne se produit pas lorsque dtypes=False.

Production attendue

test

0 34343_43434

Sortie de pd.show_versions()

[collez la sortie de pd.show_versions() ici en dessous de cette ligne]

VERSIONS INSTALLÉES

commit : aucun
python : 3.6.1.final.0
bits python : 64
OS : Windows
Version du système d'exploitation : 10
appareil : AMD64
processeur : Intel64 Family 6 Model 78 Stepping 3, GenuineIntel
ordre des octets : peu
LC_ALL : aucun
LANGUE : aucune
LOCALE : Aucun.Aucun

pandas : 0.20.3
pytest: 3.0.7
pépin : 9.0.1
outils de configuration : 27.2.0
Cython : 0.25.2
numpy : 1.12.1
scipy: 0.19.0
xarray : aucun
IPython : 5.3.0
sphinx : 1.5.6
patsy : 0.4.1
dateutil: 2.6.0
pytz : 2017.2
bloc : aucun
goulot d'étranglement : 1.2.1
tableaux : 3.2.2
exprnum : 2.6.2
plume : aucune
matplotlib : 2.0.2
openpyxl : 2.4.7
xlrd : 1.0.0
XL : 1.2.0
xlsxwriter : 0.9.6
lxml : 3.7.3
bs4 : 4.6.0
html5lib : 0.999
sqlalchimie : 1.1.9
pymysql : aucun
psycopg2 : aucun
jinja2 : 2.9.6
s3fs : aucun
pandas_gbq : aucun
pandas_datareader : aucun

Compat IO JSON

Tous les 3 commentaires

J'ai pu reproduire cela sur python 3.6.2 mais pas sur 3.5.3. Je ne sais pas pourquoi cependant

Pourrait être lié au PEP 515

Je suis capable de faire des choses comme ça en 3.6, mais pas en 3.5

In [5]: num = 34343_43434

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

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

c'est un effet secondaire malheureux du pep, mais cela me semble valable.

Cette page vous a été utile?
0 / 5 - 0 notes