Pandas: read_json()は、数字とアンダースコアのみが存在する場合、アンダースコアを削除し、文字列を整数に変換します

作成日 2017年10月14日  ·  3コメント  ·  ソース: pandas-dev/pandas

コードサンプル

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:なし

Compat IO JSON

全てのコメント3件

私はこれを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の不幸な副作用ですが、これは私には有効に見えます。

このページは役に立ちましたか?
0 / 5 - 0 評価