количество значений 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
будет:
