可从熊猫数据帧迭代

时间:2018-06-25 10:50:55

标签: python python-3.x pandas dataframe iterable

我需要创建一个可迭代形式(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)))

,但是语法错误。 你们知道怎么做吗?

2 个答案:

答案 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)

我认为首先需要在id列之前set_index,然后在orient='index'之前to_dict

fe = data.set_index('id', drop=False).to_dict(orient='index')
print (fe)
{1: {'id': 1, 'gender': 1, 'age': 25}, 
 2: {'id': 2, 'gender': 0, 'age': 23},
 3: {'id': 3, 'gender': 1, 'age': 40}}