我从数据库中提取数据,该数据库是元组列表,但列表没有保证格式。这些列表实际上由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]
这没有帮助。
答案 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
如果格式 - 元组是一致的,它可以工作。您还可以检查描述和值列表的长度是否相同。