最近发现比较坑的问题,pandas.read_json在读取长整数的时候会篡改数字。
具体的代码如下:
import json
import pandas as pd
data = {
"id1": "3661430294729648121",
"id2": "1298519559306190850",
"id3": "9999999999999999",
}
df = pd.read_json(json.dumps(data), orient='index')
print(df)
输出的结果是:

研究了半天以后在:https://github.com/pandas-dev/pandas/issues/20608 和 https://github.com/pandas-dev/pandas/issues/33766 找到了答案。
主要原因就是默认情况,pandas会把整数转换为float浮点型,然后再转为int类型,类似:

解决办法就是读取数据的时候加一个dtype={},然后代码如下:
import json
import pandas as pd
data = {
"id1": "3661430294729648121",
"id2": "1298519559306190850",
"id3": "9999999999999999",
}
df = pd.read_json(json.dumps(data), orient='index', dtype={})
print(df)
输出结果就正常了



