Pandas:与数据框

时间:2016-12-21 10:21:55

标签: python json pandas dataframe tuples

我从数据库中提取数据,该数据库是元组列表,但列表没有保证格式。这些列表实际上由JSON之类的属性组成:参数组合:

example_data = [('ID1', 12 ,['Name','Age','Job'], ['John','33','Driver']),('ID2',21, ['Name', 'Car'], ['Jane', 'Honda'])]

我想要的是填充字段的数据框,但将未知字段保留为None或NaN:

example_DF =
   ID    IX   Name   Age  Job    Car
0  ID1   12   John   33   Driver -
1  ID2   21   Jane   -    -      Honda

目前直接进行pd.DataFrame(example_data)返回:

     0   1                 2                   3
0  ID1  12  [Name, Age, Job]  [John, 33, Driver]
1  ID2  21       [Name, Car]       [Jane, Honda]

这没有帮助。

2 个答案:

答案 0 :(得分:2)

你可以这样做

import pandas as pd

example_data = [('ID1', 12, ['Name', 'Age', 'Job'], ['John', '33', 'Driver']), ('ID2', 21, ['Name', 'Car'], ['Jane', 'Honda'])]

def change_dataframe():
    temp_list = []
    for data in example_data:
        temp_dict = {'ID': data[0], 'IX': data[1]}
        temp_dict.update(dict(zip(data[2], data[3])))
        temp_list.append(temp_dict)
    return pd.DataFrame.from_dict(temp_list)

change_dataframe()

答案 1 :(得分:1)

你可以做那样的事情

import pandas as pd

example_data = [('ID1', 12 ,['Name','Age','Job'], ['John','33','Driver']),('ID2',21, ['Name', 'Car'], ['Jane', 'Honda'])]

l = []
for example in example_data:
    d = dict()
    d['id'] = example[0]
    d['row'] = example[1]
    for key, attribute in zip(example[2], example[3]):
        d[key] = attribute
    l.append(d)


df = pd.DataFrame(l)
print(df)

   Age    Car     Job  Name   id  row
0   33    NaN  Driver  John  ID1   12
1  NaN  Honda     NaN  Jane  ID2   21

如果格式 - 元组是一致的,它可以工作。您还可以检查描述和值列表的长度是否相同。