我需要创建一个可迭代形式(id,{功能名称:features weight})以使用python包。
我的数据存储在pandas数据框中,下面是一个示例:
data = pd.DataFrame({"id":[1,2,3],
"gender":[1,0,1],
"age":[25,23,40]})
对于“ {feature name:features weight}”部分,我知道我可以使用:
fe = data.to_dict(orient='records')
Out[28]:
[{'age': 25, 'gender': 1, 'id': 1},
{'age': 23, 'gender': 0, 'id': 2},
{'age': 40, 'gender': 1, 'id': 3}]
我知道我也可以遍历datframe以获得ID,如下所示:
(row[1] for row in data.itertuples())
但是我可以将这两个加在一起得到一个可迭代的(生成器对象) 我尝试过:
((row[1] for row in data.itertuples()),fe[i] for i in range(len(data)))
,但是语法错误。 你们知道怎么做吗?
答案 0 :(得分:3)
pd.DataFrame.itertuples
返回命名元组。您可以通过专用方法_asdict
迭代并将每一行转换为字典。您可以将其包装在一个生成器函数中以创建一个惰性读取器:
DriverFirstName
undefined
fsdfds
请注意,结果将是OrderedDict
个对象。作为data = pd.DataFrame({"id":[1,2,3],
"gender":[1,0,1],
"age":[25,23,40]})
def gen_rows(df):
for row in df.itertuples(index=False):
yield row._asdict()
G = gen_rows(data)
print(next(G)) # OrderedDict([('age', 25), ('gender', 1), ('id', 1)])
print(next(G)) # OrderedDict([('age', 23), ('gender', 0), ('id', 2)])
print(next(G)) # OrderedDict([('age', 40), ('gender', 1), ('id', 3)])
的子类,对于大多数目的,这应该足够了。
答案 1 :(得分:2)