【问题标题】:Python parsing url into dict: duplicate keysPython将url解析为dict:重复键
【发布时间】:2015-02-24 23:16:04
【问题描述】:

我有一个由 id 和 url 组成的原始文本数据文件。然后我想将这些 url 解析成 Python 字典,然后转换成 pandas 数据帧,这样我就可以分析某些 url 元素。

问题是某些元素是重复的。例如,一个 url 可能是/browse/?item_type=15&color=336&color=45。注意color= 出现两次。然后,如果我使用 urllib.parse.parse_qs 解析 url,生成的字典将包含键值对 'color' - ['336','45'],该值是一个列表。因此,当我尝试将解析的行连接到 url 元素的现有数据框中时会引发错误:

ValueError: 数组的长度必须相同

new_df = DataFrame.from_dict(urllib.parse.parse_qs(df1['url'][1]), orient='columns', dtype=None)
new_df['id'] = df1['id'][1]
for i in range(2,35):
    add_df = DataFrame.from_dict(urllib.parse.parse_qs(df1['url'][i]), orient='columns', dtype=None)
    add_df['id'] = df1['id'][i]
    new_df = pd.concat([new_df, add_df])

我的问题是:如何绕过这个问题?此时,如果有两种颜色,我愿意在我的数据框中只接受一种颜色——url 包含两种颜色的情况很少。

【问题讨论】:

  • 而不是将parse_qs返回的dict直接传递给DataFrame.from_dict,只需做一点预处理步骤来搜索具有列表值的键并将它们替换为例如列表中的第一个值.如果您确实想保留多种颜色,或者其他一些方案。
  • 您还可以将列表转换为元组,例如tuple(['336','45']).

标签: python dictionary pandas


【解决方案1】:
{k: [v[0]] for k, v in parse_qs('item_type=15&color=336&color=45').items()}

这将消除任何重复

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-01
    • 2013-07-09
    • 1970-01-01
    • 2017-04-03
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    相关资源
    最近更新 更多