我有以下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。
答案 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会导致奇怪的结果。