问题描述
我有一个带有一些空值的 Pandas 数据框(名为 all_samples_z_df):
        sample1     sample2    sample3  mean median mode
pos1      2           4           2       2     2
pos2      1                       1       1     1   
pos3      3           5                   4     4      
当我创建均值或中值列时没有问题,但是当我尝试创建模式列时出现此错误:ValueError:错误的项目数通过 5,放置意味着 1
我正在使用此命令,这些命令在熊猫手册中有所说明,但我收到了该模式的错误。 你知道我该如何解决这个问题吗?
all_samples_z_df['mean'] = all_samples_z_df.mean(axis=1)
all_samples_z_df['median'] = all_samples_z_df.median(axis=1)
all_samples_z_df['mode'] = all_samples_z_df.mode(axis=1)
1楼
    我注意到 DataFrame 中的“空”字段被打印为空格(而不是NaN )。 
    所以我假设你的每一列至少包含一个空间是对象类型。 
    要验证它,请运行all_samples_z_df.info() 。
要计算均值和中值,所有样本...列都应该是数字类型,否则它们将被忽略。
从均值列的结果中可以看到这种“忽略大小写”。 请注意,第一行的实际平均值是:
(2 + 4 + 2) / 3 = 2.666667
但是您对第 1 行的平均值仅为2 ,因此显然只计算了sample1列。
为了获得正确的值类型,在我的测试中,我创建了一个包含以下内容的源文件:
,sample1,sample2,sample3
pos1,2,4,2
pos2,1,,1
pos3,3,5,
并阅读它调用:
all_samples_z_df = pd.read_csv('input.csv', index_col=0)
得到:
      sample1  sample2  sample3
pos1        2      4.0      2.0
pos2        1      NaN      1.0
pos3        3      5.0      NaN
所以现在“空”值打印为NaN 。
 
    当你运行all_samples_z_df.info() ,你会看到
- sample1列是int64类型,
- 剩下的两列都是float64类型。
另一个提示:当您计算所有函数时,您应该只使用 3 个初始列。 否则,较早计算的列将作为其他计算中的源包括在内,这可能不是您想要的。
现在,没有任何障碍,您可以运行:
all_samples_z_df['mean'] = all_samples_z_df.iloc[:, 0:3].mean(axis=1)
all_samples_z_df['median'] = all_samples_z_df.iloc[:, 0:3].median(axis=1)
 
     (注意iloc[:, 0:3].添加到两个指令中)。
到目前为止,结果是:
      sample1  sample2  sample3      mean  median
pos1        2      4.0      2.0  2.666667     2.0
pos2        1      NaN      1.0  1.000000     1.0
pos3        3      5.0      NaN  4.000000     4.0
 
    现在运行all_samples_z_df.iloc[:, 0:3].mode(axis=1) (只是为了查看结果):
        0    1
pos1  2.0  NaN
pos2  1.0  NaN
pos3  3.0  5.0
意思是:
- 对于前 2 行,最常出现的值分别是2和1 。
-  
     但在第三行有两个最常出现的值(出现次数相等): 
    - 第一个是3 ,
- 第二个是5 。
 
这就是您的问题的根源:两个项目(3 和 5)已作为最后一行中新列的内容传递。
一种可能的解决方案是仅使用多个值中的第一个,因此您可以运行:
all_samples_z_df['mode'] = all_samples_z_df.iloc[:, 0:3].mode(axis=1)[0]
相反(注意添加[0] )。
现在的结果是:
      sample1  sample2  sample3      mean  median  mode
pos1        2      4.0      2.0  2.666667     2.0   2.0
pos2        1      NaN      1.0  1.000000     1.0   1.0
pos3        3      5.0      NaN  4.000000     4.0   3.0