2015-02-24 7 views
1

У меня есть файл текстовых данных, состоящий из идентификаторов и URL-адресов. Затем я хотел бы проанализировать URL-адреса в словарях Python, а затем преобразовать в data-рамки pandas, чтобы я мог анализировать определенные элементы URL.Python parsing url в dict: duplicate keys

Проблема в том, что некоторые элементы являются дубликатами. Например, URL-адрес может читать /browse/?item_type=15&color=336&color=45. Примечание: color= отображается дважды. Затем, если я использую urllib.parse.parse_qs для синтаксического анализа url, результирующий словарь будет содержать пару ключевых значений «color» - ['336', '45'], а значение - список. Как следствие, генерируется ошибка при попытке конкатенации разобранных линий в существующем dataframe ВГД элементов:

ValueError: arrays must all be same length

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-адрес содержит два цвета.

+0

Вместо прохождения Dict возвращенного 'parse_qs' непосредственно' DataFrame.from_dict' просто маленький шаг предварительной обработки для поиска ключей, которые имеют значение списка и заменить их , скажем, первое значение в списке. Или какая-то другая схема, если вы хотите сохранить несколько цветов. – Iguananaut

+0

Вы также можете преобразовывать списки в кортежи, например. 'Кортеж ([ '336', '45'])'. –

ответ

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

Это позволит устранить все дубликаты