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)
出力:
テスト
03434343434
Pandasは、初期文字列( "34343_43434")を整数(3434343434)に変換しているようで、アンダースコアを削除して変換しています。
これは、文字列内のすべての文字(アンダースコアを除く)が整数の場合にのみ発生します。 たとえば、初期値が「34343_43434X」の場合、出力は正しく「34343_43434X」になります。 この問題は、dtypes = Falseの場合には発生しません。
test
0 34343_43434
pd.show_versions()
出力[ pd.show_versions()
の出力をこの行の下に貼り付けます]
コミット:なし
python:3.6.1.final.0
python-ビット:64
OS:Windows
OSリリース:10
マシン:AMD64
プロセッサ:Intel64ファミリ6モデル78ステッピング3、GenuineIntel
バイトオーダー:少し
LC_ALL:なし
言語:なし
ローカル:なし。なし
パンダ:0.20.3
pytest:3.0.7
ピップ:9.0.1
setuptools:27.2.0
Cython:0.25.2
numpy:1.12.1
scipy:0.19.0
xarray:なし
IPython:5.3.0
スフィンクス:1.5.6
patsy:0.4.1
dateutil:2.6.0
pytz:2017.2
blosc:なし
ボトルネック:1.2.1
テーブル:3.2.2
numexpr:2.6.2
羽毛:なし
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:なし
psycopg2:なし
jinja2:2.9.6
s3fs:なし
pandas_gbq:なし
pandas_datareader:なし
私はこれをPython3.6.2で複製できましたが、3.5.3では複製できませんでした。 理由はわかりませんが
関連するかもしれないPEP 515
3.6ではこのようなことができますが、3.5ではできません
In [5]: num = 34343_43434
In [6]: type(num)
Out[6]: int
In [7]: num
Out[7]: 3434343434
これはpepの不幸な副作用ですが、これは私には有効に見えます。