如何将没有字典的嵌套列表转换为pandas Dataframe?

时间:2019-06-24 12:31:22

标签: python dictionary nested-lists

我已经从一个更大的嵌套字典创建了一个嵌套列表,现在想将该列表转换为数据框。我创建的列表没有键或值。

我试图使用dict()将列表转换成字典,但这不起作用。 列表采用这种格式(名称和数据因匿名而更改)

['Bigclient',['All Web Site Data','129374116'],  'Otherclient',['所有网站数据','164548948'],['过滤的网站数据','142386573'],['测试','72551604']。

所以我有一个父值“ Bigclient”,然后有一个子列表,其中包括数据名称和对应于该名称的ID号。每个父值具有不同数量的子对。我想制作一个具有像这样的列的数据框

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

因此,客户端名称(父值)用于对数据名称和ID进行分组

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 :(得分:0)

您在这里:

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