我有一个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})