使用Pandas计算每列的出现次数

时间:2016-02-20 23:56:47

标签: python csv pandas missing-data

我想计算两个不同值的每列出现次数,第一个是空数,第二个是我数据帧中\N的数量。示例我得到了:

   A   B   C   D   E   D
1  \N  1   \N  12  1    
2  4       \N  3   0   \N
3      4   M       \N  1

我期待以下结果:

A  2
B  1
C  2
D  1
E  1
F  2

我已经成功使用以下代码计算缺失值的数量:

df = pd.read_csv("mypath/myFile", sep=',')
null_value = df.isnull().sum()

但是以下代码不起作用:

break_line = df[df == '\N'].count()
return break_line + null_value

我收到以下错误

  

TypeError:无法将['\ N']与块值进行比较

4 个答案:

答案 0 :(得分:1)

我假设您只想计算字符串以'\ N'结尾的值。如果没有,您可以改为使用str.contains

我使用字典理解来遍历数据框的列和矢量化的str函数,以计算最后\N行的行数。

df = pd.DataFrame({'A': ['\N', 4, None], 
                   'B': [1, None, 4], 
                   'C': ['\N', '\N', 'M'], 
                   'D': [12, 3, None], 
                   'E': [1, 0, '\N'], 
                   'F': [None, '\N', 1]})

>>> df
      A   B   C   D   E     F
0    \N   1  \N  12   1  None
1     4 NaN  \N   3   0    \N
2  None   4   M NaN  \N     1    

>>> pd.Series({col: df[col].str.endswith('\N').sum() 
               if df[col].dtype == 'object' else 0 
               for col in df}) + df.isnull().sum()
A    2
B    1
C    2
D    1
E    1
F    2
dtype: int64

答案 1 :(得分:1)

一个班轮:

ns = df.applymap(lambda x: x == '\N').sum(axis = 0)

 null_value + ns

A    2
B    1
C    2
D    1
E    1
F    2

答案 2 :(得分:1)

您只需使用applymap执行以下操作:

df.applymap(lambda x: x == '\N').sum() + df.isnull().sum()

为您提供所需的输出:

A      2
B      1
C      2
D      1
E      1
F      2
dtype: int64

注意:您使用D两次;我现在用F替换它。

答案 3 :(得分:0)

仅使用向量化计算的解决方案:

df.isna().sum() + (df == '\\N').sum()

输出:

A    2
B    1
C    2
D    1
E    1
F    2