如何使用pyson在CSV中获取Json-Keys作为列名?

pprl5pva  于 2023-09-27  发布在  其他
关注(0)|答案(2)|浏览(123)

我有以下代码:

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')

enter image description here

to94eoyn

to94eoyn1#

众所周知,Excel对CSV文件的支持非常糟糕。长话短说,它通常只能正确加载在同一系统上由Excel生成的CSV文件。具体来说,分隔符由系统区域设置给出。
在这里,我假设您有一个使用分号(;)作为分隔符的系统(可能是西欧)。好消息是,你可以让Pandas使用这个分隔符:

df.to_csv('output1.csv', sep=';')

如果它仍然不起作用,您将不得不在系统配置中搜索所需的分隔符,或者从Excel系统中构建一个最小的CSV文件,并在文本编辑器中读取它(记事本就足够了),以查看实际使用的分隔符。

i2byvkas

i2byvkas2#

将JSON数据导入Pandas DataFrame时,必须正确设置pandas.read_json()的orient参数,才能将JSON中的键用作列名。JSON数据可以根据数据的结构以不同的方式组织。如果您想使用JSON数据作为列名,请假设JSON数据的结构是列表中的对象。在这种情况下,您需要将orient参数设置为“records”。下面是代码的更新版本:

import requests
import pandas as pd

api_url = "***"
headers = { "Authorization" : "***" }
response = requests.get(api_url, headers=headers)

df = pd.read_json(response.text, orient='records')

df.to_csv('output1.csv', index=False)

此脚本将使用JSON中的键作为列名,将JSON数据转换为“记录”。如果JSON数据具有不同的结构或需要特殊处理,则可以通过适当地设置orient参数将JSON数据转换为DataFrame。

相关问题