由于使用Networkx,我的数据结构很奇怪(不知道它是列表还是元组)。我需要将其转换为数据框。
我拥有的“列表”具有以下结构:
[('a', 'a', {'weight': 2}),
('a', '!', {'weight': 0}),
('a', 'c', {'weight': 2}),
('a', 'b', {'weight': 1}),
('a', 'q', {'weight': 1}),
('a', 's', {'weight': 2}),... ]
并且我需要一个数据框,如下所示:
Inf Prov Weight
a a 2
a ! 0
a c 2
a b 1
a q 1
a s 2
有人可以帮我吗?
答案 0 :(得分:1)
在创建数据帧之前先稍微简化一下数据可能是最容易的。 根据为您提供初始数据的操作(一个元组列表,每个元组包含2个字符串和一个dict),可能有可能使该操作为您提供简化的数据。但是在不可能做到这一点的情况下-或更笼统地说,当您无法控制由给定库生成的数据结构时,您可以执行一些简单的操作,例如像这样:
import pandas as pd
# initial data from qu
raw_data = [('a', 'a', {'weight': 2}),
('a', '!', {'weight': 0}),
('a', 'c', {'weight': 2}),
('a', 'b', {'weight': 1}),
('a', 'q', {'weight': 1}),
('a', 's', {'weight': 2}),]
# transform data to extract the value of each weight
data = [(elem1, elem2, d_elem.get('weight', 0)) for (elem1, elem2, d_elem) in raw_data]
# put together the dataframe from the list of records
df = pd.DataFrame.from_records(data, columns=['Inf', 'Prov', 'Weight'])
print(df)
根据需要提供结果:
Inf Prov Weight
0 a a 2
1 a ! 0
2 a c 2
3 a b 1
4 a q 1
5 a s 2
使用dict.get
允许我们指定默认值(如果未定义),而不是引发KeyError。
答案 1 :(得分:0)
import pandas as pd
x=[('a', 'a', {'weight': 2}),
('a', '!', {'weight': 0}),
('a', 'c', {'weight': 2}),
('a', 'b', {'weight': 1}),
('a', 'q', {'weight': 1}),
('a', 's', {'weight': 2})]
inf_list=list([])
prov_list=list([])
weight_list=list([])
for tuple in x:
inf_list.append(tuple[0])
prov_list.append(tuple[1])
weight_list.append(tuple[2])
df=pd.DataFrame()
df['inf']=inf_list
df['prov']=prov_list
df['weight']=weight_list
df['weight']=df['weight'].map(lambda x:x['weight'])
print(df)