我目前正在使用Pandas测试Google Search Console API数据。
数据的结构如下:
'rows': [{
'impressions': 307.0,
'clicks': 79.0,
'position': 1.013029315960912},
{'keys': ['spring break 2018', 'https://zrce.eu/partykalender/big-beach-spring-break/']},
{
'impressions': 5307.0,
'clicks': 179.0,
'position': 1.013029315960912},
{'keys': ['spring break zrce', 'https://zrce.eu/partykalender/big-beach-spring-break/']},
{
'impressions': 3307.0,
'clicks': 759.0,
'position': 1.013029315960912},
{'keys': ['spring break 2017', 'https://zrce.eu/partykalender/big-beach-spring-break/']},
{
'impressions': 3567.0,
'clicks': 749.0,
'ctr': 0.25732899022801303,
'position': 1.013029315960912},
{'keys': ['zrce', 'https://zrce.eu/']}
]
我将数据转换为Pandas数据框,如下所示:
df = json_normalize(jsonfiles, 'rows')
我的问题是嵌套键数组。我想将数组的第一个值转换为关键字列,第二个值转换为url列。
输出应该是这样的
{
'impressions': 3567.0,
'clicks': 749.0,
'ctr': 0.25732899022801303,
'position': 1.013029315960912},
'keyword': 'zrce',
'url': 'https://zrce.eu/'}, ...
不幸的是这样的事情不起作用
df["keyword"]=df["position"][0]
df["url"]=df["position"][0]
如果我查询API以仅获取关键字或url,则类似的工作。在这种情况下,数组只有1个值。
df['keyword'] = df['keys'].apply(pd.Series)
但是当然在数组中有2个值会失败
最佳答案
似乎需要一些预处理才能修复您的数据。让我们合并相邻的记录,以便同时读取keys
中的数据-
y = data['rows']
for i, j in zip(y[::2], y[1::2]):
i.update(dict(zip(['keyword', 'url'], j['keys'])))
现在,读取
data
中的每个备用记录-df = pd.io.json.json_normalize(data['rows'][::2])
df
clicks ctr impressions keyword position \
0 79.0 NaN 307.0 spring break 2018 1.013029
1 179.0 NaN 5307.0 spring break zrce 1.013029
2 759.0 NaN 3307.0 spring break 2017 1.013029
3 749.0 0.257329 3567.0 zrce 1.013029
url
0 https://zrce.eu/partykalender/big-beach-spring...
1 https://zrce.eu/partykalender/big-beach-spring...
2 https://zrce.eu/partykalender/big-beach-spring...
3 https://zrce.eu/
在此
to_dict('r')
上调用df
将为您提供以下信息-[
{
"clicks": 79.0,
"url": "https://zrce.eu/partykalender/big-beach-spring-break/",
"position": 1.013029315960912,
"ctr": NaN,
"impressions": 307.0,
"keyword": "spring break 2018"
},
...
]
免责声明!此方法将修改您的数据。如果您不希望这样做,建议您先复印一份。