Как превратить вложенный список без словаря в панду Dataframe? - PullRequest
0 голосов
/ 24 июня 2019

Я создал вложенный список из большего вложенного словаря и теперь хочу преобразовать этот список во фрейм данных. список, который я создал, не имеет ключей или значений.

Я пытался преобразовать список в словарь с помощью dict (), но это не работает. список в этом формате (имена и данные изменены для анонимности)

['Bigclient', ['Все данные веб-сайта', '129374116'], 'Otherclient', ['Все данные веб-сайта', '164548948'], ['Фильтрованные данные веб-сайта', '142386573'], ['Тест', '72551604'].

поэтому у меня есть родительское значение 'Bigclient', которое затем имеет дочерний список, включающий имя данных и идентификационный номер, соответствующий этому имени. Каждое родительское значение имеет различное количество дочерних пар. Я хочу создать фрейм данных с тремя столбцами, например,

Client_name  dataname  ID
BigClient    All Web   129374116
Other Client All web   164548948
Other Client Filtered  142386573
Other Client Test      7255160

поэтому имя клиента (родительское значение) используется для группировки имен данных и идентификаторов

new =[]
for item in data['items']:
    name = item.get('name')
    if name:
        new.append(name)
        webprop = item.get('webProperties')
        if webprop:
            for profile in webprop:
                profile = profile.get('profiles')
                if profile:
                    for idname in profile:
                        idname = idname.get('name')
                    for idname1 in profile:
                        idname1 = idname1.get('id')
                    if idname:
                        result = [idname, idname1]
                    new.append(result)
                else:
                    continue
        else:
            continue

Так я построил свой список, но в нем нет словарей.

1 Ответ

0 голосов
/ 24 июня 2019

Вот, пожалуйста,

import pandas as pd

raw_data = ['Bigclient', ['All Web Site Data', '129374116'], 'Otherclient', ['All Web Site Data', '164548948'], ['Filtered website data', '142386573'], ['Test', '72551604']]

# collect dsata
keys_list = []
values_list = [[] for _ in range(2)]
count = -1
for item in raw_data:
    if isinstance(item, str):
        keys_list.append(item)
        count += 1
    else:
        values_list[count].append(item)

# create data dictionary
data_dict = dict(zip(keys_list, values_list))

# create data frame
raw_df = pd.DataFrame(columns=['Client_name', 'data'])
for key, values in data_dict.items():
    for value in values:
        raw_df = raw_df.append({'Client_name': key, 'data': value}, ignore_index=True)

# split list data into 2 columns
spilt_data = pd.DataFrame(raw_df['data'].values.tolist(), columns=['dataname','ID'])
# concat data
result = pd.concat([raw_df, spilt_data], axis=1, sort=False)
# drop used column
result = result.drop(['data'], axis=1)

Вывод:

   Client_name               dataname         ID
0    Bigclient      All Web Site Data  129374116
1  Otherclient      All Web Site Data  164548948
2  Otherclient  Filtered website data  142386573
3  Otherclient                   Test   72551604
...