Pandas read_json将字符串转换为十进制(尽管它有双引号包围数据)



我有一个JSON文件,其中一个字段应该是一个字符串,表示NPI数字。JSON文件看起来像这样:

[{ ...
"npi_109":"1234567891",
...
}, 
{ ...more records }]

我用pandas来读它,像这样:

import pandas as pd
df = pd.read_json("temp/" + file.orig_filename, encoding = 'unicode_escape')

我读取到一个数据框架,然后使用pyarrow写到Parquet。我看到parquet中的字段被定义为小数。为了解决字段被读取为十进制的问题(尽管JSON中包含双引号),我将该列转换为字符串,如下所示:

df['npi_109'] = df['npi_109'].astype(str)

但最终发生的是数字被转换成:"1234567891.0";这不是我们想要的,所以有解决这个问题的方法吗?

如何:

df['npi_109'] = df['npi_109'].astype(int).astype(str)

或者,如果您在读取json时不需要pandas来推断类型:

df = pd.read_json(filename, encoding = 'unicode_escape', dtype=False)

或者强制为字符串列

df = pd.read_json(filename, encoding = 'unicode_escape', dtype={column_name: str})

最新更新