繁体   English   中英

python3:JSON数据在读取后略有变化

[英]python3: json data changed slightly after being read

我有一些来自webscraping twitter的json数据,在notepad ++中打开json显示了此示例键值对:

"id_str": "823962574509248514",

但在读完json之后(我有以下两种方式):

filename = "../TheTweets/data/short.json"
columnName = ['id_str','created_at', 'full_text','in_reply_to_status_id']
data = pd.read_json(filename, orient=columnName)
#data = pd.DataFrame(pd.read_json(filename, orient=columnName,encoding="utf-8"),columns=columnName)

我注意到id_str编号已更改:

"id_str":823962574509248512, (looks like the last number)

运行print(data.dtypes)后,我看到id_str是int64

我不太了解发生了什么,如果id不再匹配,这似乎是一个很大的问题(我继续将数据保存回新的json,并在notepad ++中进行比较)。 如果我有成千上万的行,我不太清楚这会带来什么影响

这似乎是一个错误(请不要在pd.read_json我的意思), pd.read_json字符串隐式转换为整数,这不应该发生。 您可以尝试强制dtype并防止发生转换。

这是您当前正在发生的事情:

In [107]: j
Out[107]: '{"id_str":{"0":"823962574509248514"}}'

In [108]: pd.read_json(j)
Out[108]: 
               id_str
0  823962574509248512

现在,通过在dtype参数read_json ,看到了差距:

In [109]: pd.read_json(j, dtype={'id_str' : str})
Out[109]: 
               id_str
0  823962574509248514   # note the difference in the last digit

In [110]: _.dtypes
Out[110]: 
id_str    object
dtype: object

如果要强制多列,请向dtype字典添加更多键值。 如果您希望所有内容都为字符串,则dtype=str可以。


好吧,这是有希望的。 给定您的示例数据, json_normalize似乎是这里的方法。

In [132]: pd.io.json.json_normalize(json.loads(data))
Out[132]: 
                       created_at  \
0  Tue Jan 24 18:36:00 +0000 2017   

                                           full_text              id_str  \
0  @ABC Can I send a DM, I've emailed twice and g...  823962574509248514   

  in_reply_to_status_id  
0                  None  

请注意, id_str 可以使用。 在你的情况,你需要调用json.load你的文件,并传递给函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM