我目前正在使用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"
    },
    ...
]


免责声明!此方法将修改您的数据。如果您不希望这样做,建议您先复印一份。

09-27 01:38
查看更多