Функция читает цель итерации как локальную строку аргумента вместо значения итерации в цикле for - PullRequest
1 голос
/ 17 апреля 2019

Попытка запустить этот простой цикл for с помощью функции кросс-таблицы pandas.Цель итерации является аргументом в функции кросс-таблицы.Предполагается прочитать список столбцов и создать кросс-таблицу для каждой комбинации столбцов.Но вместо этого он интерпретирует итеративное «i» как буквальный заголовок столбца, а не какую-либо переменную, которая должна быть в этой итерации.

Я получаю ошибку: у объекта «DataFrame» нет атрибута «i», потому что ончтение «i» как буквального имени атрибута вместо значения, которое должно храниться в i из цикла.

import pandas



DF = pandas.read_excel('example.xlsx')

Categories = list(DF.columns.values)

for i in Categories:

    pandas.crosstab(DF.Q, DF.i, normalize = 'index', margins=True)

1 Ответ

2 голосов
/ 17 апреля 2019

IIUC, вы хотите зациклить каждый столбец и создать кросс-таблицу для столбца Q, но ваш текущий цикл ничего не даст.

Используйте следующее для назначения результатов питону dict, к которому вы можете обращаться с именами столбцов в качестве ключа:

DF = pandas.read_excel('example.xlsx')

Categories = list(DF.columns.values)

cross_tabs = {}

for i in Categories:
    cross_tabs[i] = pandas.crosstab(DF.Q, DF[i], normalize = 'index', margins=True)
...