2015-11-19 2 views
1

У меня есть кадр данных Pandas, для которого я хотел бы вернуть число уникальных значений в каждом столбце, за исключением того, что некоторые столбцы должны быть исключены.Условно перебрать столбцы в Pandas

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

pd.unique(df.column_name.ravel()) 

Мой ум идет к чему-то вроде этого, но это, очевидно, не является действительным.

col_names = list(df.columns.values) 
dont_include = ['foo', 'bar'] 
cols_to_include = [x for x in col_names if x not in dont_include] 
for i in cols_to_include: 
col_unique_count = len(pd.unique(df.i.ravel()) 

Какое оптимальное решение?

ответ

2

код можно упростить следующим образом:

cols_to_include = df.columns[~df.columns.str.contains('foo')] 
for col in cols_to_include: 
    col_unique_count = df[col].nunique() 

Вы можете позвонить nunique, чтобы получить количество уникальных значений для данной серии

Или:

cols_to_include = df.columns[~df.columns.str.contains('foo')] 
df[cols_to_include].apply(pd.Series.nunique) 

здесь apply призовет nunique на каждую колонку

EDIT

Использование isin для проверки членства и ~ отрицать булеву маску:

In [47]: 
df = pd.DataFrame(columns = ['foo','baz','bar','pie']) 
df 

Out[47]: 
Empty DataFrame 
Columns: [foo, baz, bar, pie] 
Index: [] 

In [48]: 
dont_include = ['foo', 'bar'] 
cols = df.columns[~df.columns.isin(dont_include)] 
cols 

Out[48]: 
Index(['baz', 'pie'], dtype='object') 

Вы можете использовать мой код, как и раньше, чтобы перебрать к югу выбор вашего ФРА

Смежные вопросы