итерируемый из панд данных - PullRequest
0 голосов
/ 25 июня 2018

Мне нужно создать итерируемую форму (id, {имя функции: вес функций}) для использования пакета Python.

мои данные хранятся в фрейме данных pandas, вот пример:

data = pd.DataFrame({"id":[1,2,3],
                    "gender":[1,0,1],
                    "age":[25,23,40]})

для части {имя функции: вес функций}), я знаю, что могу использовать это:

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}]

Я знаю, что я также могу перебирать рамки данных для получения идентификатора, напримерэто:

(row[1] for row in data.itertuples())

Но я могу собрать эти два вместе, чтобы получить один итеративный объект (генератор). Я попытался:

((row[1] for row in data.itertuples()),fe[i] for i in range(len(data)))

, но синтаксис неправильный.Ребята, вы знаете, как это сделать?

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

pd.DataFrame.itertuples возвращает именованные кортежи. Вы можете перебирать и преобразовывать каждую строку в словарь с помощью специального метода _asdict. Вы можете обернуть это в функцию генератора, чтобы создать ленивый читатель:

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)])

Обратите внимание, что результатом будет OrderedDict объектов. Как подкласс dict, для большинства целей этого должно быть достаточно.

0 голосов
/ 25 июня 2018

Я думаю, нужно сначала set_index по столбцу id, а затем to_dict с orient='index':

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}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...