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
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.
test
0 34343_43434
pd.show_versions()
[collez la sortie de pd.show_versions()
ici en dessous de cette ligne]
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
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.