Использование циклов для вызова нескольких столбцов панд данных - PullRequest
0 голосов
/ 06 ноября 2019

Я новичок в python3 и пытаюсь выполнить тесты по квадратам столбцов в панде. Мои столбцы в парах: seen_count_column_1, ожидаемый count_column_1, seen_count_column_2, Ожидаемый_count_column_2 и так далее. Я хотел бы создать цикл для одновременного выполнения всех пар столбцов.

Я смогу сделать это, если укажу целые числа столбцов или имена столбцов вручную. Это работает

from scipy.stats import chisquare
import pandas as pd
df = pd.read_csv (r'count.csv')
chisquare(df.iloc[:,[0]], df.iloc[:,[1]])

Это, пытаясь с циклом, не:

from scipy.stats import chisquare
import pandas as pd
df = pd.read_csv (r'count.csv')
for n in [0,2,4,6,8,10]:    
    chisquare(df.iloc[:,[n]], df.iloc[:,[n+1]]

Кажется, что код цикла не работает вообще, и я не получаю никакой ошибки, но и никакого вывода тоже.

Мне было интересно, почему это происходит и как я могу на самом деле подойти к этому?

Спасибо, Дэн

Ответы [ 3 ]

0 голосов
/ 06 ноября 2019

Рассмотрите возможность создания фрейма данных результатов хи-квадрат из списка кортежей, затем назначьте имена столбцов в качестве индикаторов для наблюдаемой и ожидаемой частот (подстановка четных / нечетных столбцов с помощью индексированных обозначений):

# CREATE DATA FRAME FROM LIST IF TUPLES 
# THEN ASSIGN COLUMN NAMES
chi_square_df = (pd.DataFrame([chisquare(df.iloc[:,[n]], df.iloc[:,[n+1]]) \ 
                                for n in range(0,11,2)],
                              columns = ['chi_sq_stat', 'p_value'])
                   .assign(obs_freq = df.columns[::2],
                           exp_freq = df.columns[1::2])
                )
0 голосов
/ 07 ноября 2019

Спасибо за предложения. Используя информацию из комментария Parfait, что циклы не печатаются, мне удалось найти решение, хотя и не такое элегантное, как их собственное решение выше.

for n in range(0, 11, 2):
    print(chisquare(df.iloc[:,[n]], df.iloc[:,[n+1]]))

Это дает ожидаемые результаты.

Dan

0 голосов
/ 06 ноября 2019

Функция chisquare () возвращает два значения, поэтому вы можете попробовать это:

for n in range(0, 11, 2):
    chisq, p = chisquare(df.iloc[:,[n]], df.iloc[:,[n+1]]
    print('Chisq: {}, p-value: {}'.format(chisq, p))

Вы можете найти то, что она возвращает в документации здесь https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.chisquare.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...