我想计算两个不同值的每列出现次数,第一个是空数,第二个是我数据帧中\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']与块值进行比较
答案 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