python - 删除行和 ValueError 数组的长度不同

标签 python pandas numpy dataframe valueerror

我的数据框有子类别,在每个类别(catdogbird)下,会显示统计信息。如果行包含 countfreq 中的信息,我需要删除这些行,并且只保留包含 sdmean 的行> 值(value)观。一些值为 NaN

ValueError 发生在我的代码中。

df:

 var    stats    A     B     C
 cat     mean    2     3     4
 NaN     sd      2     1     3
 NaN     count   5     2     6
 NaN     freq    3     1     19
 dog     mean    8     1     2
 NaN     sd      2     1     3
 NaN     count   4     6     1
 NaN     freq    3     1     19   
 bird    mean    2     3     4
 NaN     sd      2     1     3
 NaN     count   5     2     6
 NaN     freq    NaN   NaN   NaN 

我的代码:

rows = ['count', 'freq']
df = [df.stats != rows]

预期结果

 var    stats    A     B     C
 cat     mean    2     3     4
 NaN     sd      2     1     3
 dog     mean    8     1     2
 NaN     sd      2     1     3   
 bird    mean    2     3     4
 NaN     sd      2     1     3

错误:

File "pandas/_libs/lib.pyx", line 805, in pandas._libs.lib.vec_compare 
(pandas/_libs/lib.c:14288)
ValueError: Arrays were different lengths: 819 vs 9

我不确定如何检查数组长度,但在我的 Excel 电子表格中,所有列和行的长度都相同。此错误是由我的数据中的 NaN/空单元格引起的吗?

谢谢!

最佳答案

!= 在这里不起作用。使用 pd.Series.isin 获取一个掩码,然后您将使用它来过滤您的数据帧。

m = ~df.stats.isin(['count', 'freq'])
print(m)
0      True
1      True
2     False
3     False
4      True
5      True
6     False
7     False
8      True
9      True
10    False
11    False
Name: stats, dtype: bool

print(df[m])
    var stats    A    B    C
0   cat  mean  2.0  3.0  4.0
1   NaN    sd  2.0  1.0  3.0
4   dog  mean  8.0  1.0  2.0
5   NaN    sd  2.0  1.0  3.0
8  bird  mean  2.0  3.0  4.0
9   NaN    sd  2.0  1.0  3.0

关于python - 删除行和 ValueError 数组的长度不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46655712/

相关文章:

python - Pandas:如何从 CSV 读取字节和非字节列并解码字节列?

python - 如何使用模块 re 从数据帧的列中删除特殊字符?

python - 检查变量是否为 None 或 numpy.array

python - Numpy:从 3D 数组中减去 Numpy argmin

python:列表操作

python - 带有 argparse 的 Pytest : how to test user is prompted for confirmation?

python - FFT - 滤波 - 逆 FFT - 剩余偏移

python-2.7 - "tuple index out of range"读取pandas pickled面板

python - 基于边缘的二值化

python - 列表索引必须是整数,而不是 str