我有以下代码:
import requests
import pandas
api_url = "***"
Headers = { "Authorization" : "***" }
response = requests.get(api_url, headers=Headers)
obj = pandas.read_json(response.text, orient='values')
obj.to_csv('output1.csv')
我得到以下CSV格式的输出:
enter image description here
所以JSON-Keys不是列名,所有内容都在A列中,B列中没有任何内容,依此类推。如何将JSON键作为列名?
df = pandas.json_normalize(response.json()["value"])
print(df)
看起来像这样:
pullRequestId codeReviewId ... completionOptions.transitionWorkItems labels
01188511885... NaN NaN 1 11965 11965. NaN NaN 2 11958 11958. NaN NaN 3 11936 11936. NaN NaN 4 11923 11923. NaN NaN.....……96 11220 11220 NaN [名称'id':'1d85b8f2-7712-46e6-9eb0-dd789ed3d7d1'. 97 11122 11122 ... True NaN 98 11142 11142. NaN [名称'id':'1d85b8f2-7712-46e6-9eb0-dd789ed3d7d1'. 99 11194 11194 ... True NaN 100 11201 11201.楠楠
[101行x 44列]
但是CSV看起来像这样:
df.to_csv('output1.csv')
2条答案
按热度按时间to94eoyn1#
众所周知,Excel对CSV文件的支持非常糟糕。长话短说,它通常只能正确加载在同一系统上由Excel生成的CSV文件。具体来说,分隔符由系统区域设置给出。
在这里,我假设您有一个使用分号(
;
)作为分隔符的系统(可能是西欧)。好消息是,你可以让Pandas使用这个分隔符:如果它仍然不起作用,您将不得不在系统配置中搜索所需的分隔符,或者从Excel系统中构建一个最小的CSV文件,并在文本编辑器中读取它(记事本就足够了),以查看实际使用的分隔符。
i2byvkas2#
将JSON数据导入Pandas DataFrame时,必须正确设置pandas.read_json()的orient参数,才能将JSON中的键用作列名。JSON数据可以根据数据的结构以不同的方式组织。如果您想使用JSON数据作为列名,请假设JSON数据的结构是列表中的对象。在这种情况下,您需要将orient参数设置为“records”。下面是代码的更新版本:
此脚本将使用JSON中的键作为列名,将JSON数据转换为“记录”。如果JSON数据具有不同的结构或需要特殊处理,则可以通过适当地设置orient参数将JSON数据转换为DataFrame。