pandas value_counts应用于每一列

Edo*_*ard 15 python dataframe pandas

我有一个dataframe来自外部源(csv文件)的众多列(≈30),但其中有几列没有值或总是相同.因此,我会很快看到value_counts每一列,我该怎么做?

例如

  Id, temp, name
1 34, null, mark
2 22, null, mark
3 34, null, mark
Run Code Online (Sandbox Code Playgroud)

会给我一个说明这个的对象

  • Id:34 - > 2,22 - > 1
  • temp:null - > 3
  • 名称:标记 - > 3

所以我会知道temp是无关紧要的,名字不是很有趣(总是一样的)

小智 14

对于数据帧,

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

以下代码

for c in df.columns:
    print "---- %s ---" % c
    print df[c].value_counts()
Run Code Online (Sandbox Code Playgroud)

将产生以下结果:

---- id ---
34    2
22    1
dtype: int64
---- temp ---
null    3
dtype: int64
---- name ---
mark    3
dtype: int64
Run Code Online (Sandbox Code Playgroud)


Mar*_*man 8

一个很好的方法来做到这一点并返回一个很好的格式化程序系列是结合pandas.Series.value_countspandas.DataFrame.stack

对于数据帧

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

你可以做类似的事情

df.apply(lambda x: x.value_counts()).T.stack()
Run Code Online (Sandbox Code Playgroud)

在此代码中,df.apply(lambda x: x.value_counts())适用value_counts于每一列并将其附加到结果中DataFrame,因此您最终会得到一个DataFrame具有相同列和每列中每个不同值的一行(并且null每个值中没有出现很多柱子)。

之后,T转置DataFrame(所以你最终DataFrame得到一个索引等于列和列等于可能值stack的列),并将的列DataFrame转换为 MultiIndex 的新级别并“删除”所有Null值,使整个事情成为一个Series.

这样做的结果是

id    22      1
      34      2
temp  null    3
name  mark    3
dtype: float64
Run Code Online (Sandbox Code Playgroud)


Nap*_*Jon 7

你可以使用df.apply哪个将使用提供的函数应用每个列,在这种情况下计算缺失值.这是它的样子,

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


Jag*_*gie 6

代码如下

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
Run Code Online (Sandbox Code Playgroud)

将产生:

在此处输入图片说明