[英]How to read a json file and write the data to csv file in python3?
[英]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.