Есть ли в pandas метод для отображения уникальных уровней данных в чистой таблице? - PullRequest
1 голос
/ 18 апреля 2020

Я пытаюсь использовать python вместо R для анализа опроса. Когда я первоначально изучаю данные опроса, мне нравится распечатывать уникальные категориальные значения в наборе данных. Это полезно для просмотра того, как данные были сохранены в инструменте опроса, и полезно для сравнения с опциями, записанными в опросе.

Используя df ['Example']. Unique () Я могу найти уровни. Однако я хотел бы иметь возможность печатать их чисто в блокноте. Мне нравится, как pandas кадры данных выглядят при печати в записной книжке, но данные кадры требуют, чтобы данные были в формате наблюдения или объекта. Я не смог успешно привести уровни различных значений в DataFrame.

Существует ли встроенная функция для отображения уровней кадра данных с использованием pandas? В противном случае, какие-либо предложения о том, как это сделать?

Пока я просто печатаю на экране для справки. Затем я сохраняю в CSV-файл для просмотра в Excel.

maxLevels = 21
dfUnique = df.nunique() < maxLevels
fixedLevelColnames = list(dfUnique[dfUnique == True].index)

with open('Levels.csv', 'w', encoding='utf-8') as levelFile:
    for name in fixedLevelColnames:
        levels = [str(level) for level in df[name].unique()]
        levels.sort()
        levelString = '{} has {} Unique Level(s),{}\n'.format(str(name),df[name].nunique(),",".join(levels))
        print(levelString.replace(',',', '))
        levelFile.write(levelString)

Пример вывода:
A имеет 5 уникальных уровней, Не знаю, Мягко, Умеренно , Нет, серьезно
B имеет 3 уникальных уровня, Не знаю, Нет, да
C имеет 3 уникальных уровня, Не знаю, Нет, да

Ответы [ 2 ]

0 голосов
/ 19 апреля 2020

Следующее создает фрейм данных, на который я надеялся.

Если есть встроенная функция, которая делает что-то подобное, которую все равно было бы полезно знать.

df = pd.DataFrame({'A': ['Yes', 'No', 'Yes', 'No'],
                   'B': ['Yes', 'No', "I don't know", 'No'],
                   'C': ['Yes', 'No', "I don't know", "I'm not telling you"]})
df

'''
     A             B                    C
0  Yes           Yes                  Yes
1   No            No                   No
2  Yes  I don't know         I don't know
3   No            No  I'm not telling you
'''

max_levels = 10
df_levels = pd.DataFrame(index=range(0,max_levels), columns=df.columns)
for c in df.columns:
    df_levels[c] = pd.Series([df[c].nunique(), *df[c].unique()])
print(df_levels.fillna('-').T)

'''
   0    1   2             3                    4  5  6  7  8  9
A  2  Yes  No             -                    -  -  -  -  -  -
B  3  Yes  No  I don't know                    -  -  -  -  -  -
C  4  Yes  No  I don't know  I'm not telling you  -  -  -  -  -
'''

0 голосов
/ 18 апреля 2020

Как насчет?

df = pd.DataFrame({'A': ['a', 'a', 'b', 'b', 'b'],
                   'B': [10, 8, 6, 4, 4],
                   'C': [9, 7, 4, 3, 9]})
df

    A   B   C
0   a   10  9
1   a   8   7
2   b   6   4
3   b   4   3
4   b   4   9


cat_list = [df[c].value_counts().to_frame() for c in df.columns]

catted_df = pd.concat(cat_list, axis=1)
catted_df.fillna(0).astype(int)

    A   B   C
3   0   0   1
4   0   2   1
6   0   1   0
7   0   0   1
8   0   1   0
9   0   0   2
10  0   1   0
a   2   0   0
b   3   0   0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...