为什么在Pandas中平均选定的列会产生错误的结果?

时间:2015-12-01 06:39:42

标签: python pandas

我有以下CSV data

id,gene,celltype,stem,stem,stem,bcell,bcell,tcell
id,gene,organs,bm,bm,fl,pt,pt,bm
134,foo,about_foo,20,10,11,23,22,79
222,bar,about_bar,17,13,55,12,13,88

然后我选择第3和第4列:

import pandas as pd
df = pd.read_csv("http://dpaste.com/1X74TNP.txt",header=None)
df_genes = df.iloc[2:]
df_genes[df_genes.columns[[3,4]]]

给出了:

Out[217]:
    3   4
2  20  10
3  17  13

但是当我对它们进行平均时,它会给出这个:

In [219]: df_genes[df_genes.columns[[3,4]]].mean(axis=1)
Out[219]:
2    1005.0
3     856.5
dtype: float64

做正确的方法是什么?对于所有行,正确的结果是15。

2 个答案:

答案 0 :(得分:5)

pandas中,dataframe列中的所有值都具有相同的数据类型。不要读取前两个注释行。 pandas将无法识别这些列实际上是数字。

import pandas as pd
df = pd.read_csv("http://dpaste.com/1X74TNP.txt", skiprows=2, header=None)
df_genes = df[[3,4]]
df_genes.mean(axis=1)

答案 1 :(得分:3)

正如cel指出的那样,列的dtype不正确。如果您需要读取整个数据集,并且不能使用cel建议的跳过行,则可以选择在mean()之前添加astype()方法:

In [32]: df_genes[df_genes.columns[[3,4]]].astype('float64').mean(axis=1)
Out[32]: 
2    15
3    15
dtype: float64

我总是在执行操作之前尝试检查列的类型,因为错误的dtype会导致奇怪的结果。