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