Проведите несколько поисковых тестов для каждого столбца кадра данных панд. - PullRequest
0 голосов
/ 16 октября 2018

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

Ввод:

lvl1 = ['A','A','A','A','A','B','B','B','B',np.nan ]
lvl2 = ['foo','foo','bar','bar','bar','foo','foo','foo','bar','bar']
df = pd.DataFrame({ 'L1' : lvl1, 'L2' : lvl2})


df.apply(lambda x: [ 100*(1-x.count()/len(x.index)),x.dtype,x.unique()],result_type='expand').T.rename(index=str, columns={0: "Nullity %", 1: "Type",2:"Unique Values"})

вывод

    Nullity %   Type    Unique Values
L1  10          object  [A, B, nan]
L2  0           object  [foo, bar]

В будущем я хочучтобы расширить это, чтобы включить другие тесты для столбцов и спросить, как правильно сделать это в pandas

UPD: Дополнительный вопрос: Как я могу добавить счетчики каждого из уникальных значений в этом тесте?

1 Ответ

0 голосов
/ 16 октября 2018

Одна идея состоит в том, чтобы использовать словарь для определения имен столбцов и связанных функций:

d = {'Nullity %': lambda x: 100*(1-x.count()/len(x.index)),
     'Type': lambda x: x.dtype,
     'Unique Values': lambda x: x.unique()}

res = pd.DataFrame([{name: func(df[col]) for name, func in d.items()} for col in df],
                   index=df.columns)

print(res)

    Nullity %    Type Unique Values
L1       10.0  object   [A, B, nan]
L2        0.0  object    [foo, bar]

Для более функционального решения вы можете использовать модуль operator:

from operator import attrgetter, methodcaller

d = {'Nullity %': lambda x: 100*(1-x.count()/len(x.index)),
     'Type': attrgetter('dtype'),
     'Unique Values': methodcaller('unique')}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...