使用 Pandas 计算每列出现的次数
Count the number of occurence per column with Pandas
我想计算每个列中两个不同值的出现次数,第一个是 null 的数量,第二个是数据框中 \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: Could not compare ['\N'] with block values
我假设您只想计算字符串以“\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
一个班轮:
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
您可以使用 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
.
仅使用向量化计算的解决方案:
df.isna().sum() + (df == '\N').sum()
输出:
A 2
B 1
C 2
D 1
E 1
F 2
我想计算每个列中两个不同值的出现次数,第一个是 null 的数量,第二个是数据框中 \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: Could not compare ['\N'] with block values
我假设您只想计算字符串以“\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
一个班轮:
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
您可以使用 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
.
仅使用向量化计算的解决方案:
df.isna().sum() + (df == '\N').sum()
输出:
A 2
B 1
C 2
D 1
E 1
F 2