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

у меня есть dataframe с многочисленными столбцами (≈30) из внешнего источника (csv-файл), но некоторые из них не имеют значения или всегда одинаковы. Таким образом, я хотел бы видеть быстро value_counts для каждого столбца, как я могу это сделать?

  Id, temp, name
1 34, null, mark
2 22, null, mark
3 34, null, mark

вернет мне объект, указав, что

  • Id: 34 -> 2, 22 -> 1
  • temp: null - > 3
  • имя: Марк -> 3

Так что я бы знал, что temp неуместно и название не интересно (всегда одно и то же)

4 ответов


для таблицы данных,

df = pd.DataFrame(data=[[34, 'null', 'mark'], [22, 'null', 'mark'], [34, 'null', 'mark']], columns=['id', 'temp', 'name'], index=[1, 2, 3]) 

следующий код

for c in df.columns:
    print "---- %s ---" % c
    print df[c].value_counts()

даст следующий результат:

---- id ---
34    2
22    1
dtype: int64
---- temp ---
null    3
dtype: int64
---- name ---
mark    3
dtype: int64

можно использовать df.apply который будет применять каждый столбец с предоставленной функцией, в этом случае подсчет пропущенного значения. Вот как это выглядит,

df.apply(lambda x: x.isnull().value_counts())


хороший способ сделать это и вернуть красиво форматирующую серию объединяет pandas.Series.value_counts и pandas.DataFrame.stack.

для фрейма данных

df = pandas.DataFrame(data=[[34, 'null', 'mark'], [22, 'null', 'mark'], [34, 'null', 'mark']], columns=['id', 'temp', 'name'], index=[1, 2, 3]) 

вы можете сделать что-то вроде

df.apply(lambda x: x.value_counts()).T.stack()

в этом коде df.apply(lambda x: x.value_counts()) применяется value_counts к каждому столбцу и добавляет его к результирующему DataFrame, так что вы в конечном итоге с помощью DataFrame С теми же столбцами и одной строкой на каждое другое значение в каждом столбце (и много null для каждого значения, которое не отображается в каждом столбец.)

после этого, T транспонирует DataFrame (таким образом, вы в конечном итоге с помощью DataFrame с индексом, равным столбцам, и столбцами, равными возможным значениям), и stack поворачивает столбцы DataFrame в новый уровень Мультииндекса и "удаляет" все Null значения, что делает все это Series.

в результате

id    22      1
      34      2
temp  null    3
name  mark    3
dtype: float64

следующий код

df = pd.DataFrame(data=[[34, 'null', 'mark'], [22, 'null', 'mark'], [34, 'null', 'mark']], columns=["id", 'temp', 'name'], index=[1, 2, 3]) 
result2 = df.apply(pd.value_counts)
result2

будет:

enter image description here