为数据框中的所有值添加一个

时间:2015-06-12 02:38:10

标签: pandas dataframe

我有一个类似下面的数据框。我想在每行的所有值中添加一个。我是这个论坛和python的新手,所以我无法概念化如何做到这一点。我需要为每个值添加1。我打算使用贝叶斯概率,当我乘以它们时,后验概率将为0。 PS。我也是概率新手,但其他人也采用了相同的方法。感谢您的帮助。我正在使用熊猫来做这件事。

Disease  Gene1  Gene2  Gene3 Gene4 
D1    0    0    25   0  
D2    0    0    0    0  
D3    0    17   0    16  
D4    24   0    0    0  
D5    0    0    0    0  
D6    0    32   0    11  
D7    0    0    0    0  
D8    4    0    0    0

2 个答案:

答案 0 :(得分:5)

您可以过滤df是否基础dtype不是'对象':

In [110]:
numeric_cols = [col for col in df if df[col].dtype.kind != 'O']
numeric_cols

Out[110]:
['Gene1', 'Gene2', 'Gene3', 'Gene4']

In [111]:    
df[numeric_cols] += 1
df

Out[111]:
  Disease  Gene1  Gene2  Gene3  Gene4
0      D1      1      1     26      1
1      D2      1      1      1      1
2      D3      1     18      1     17
3      D4     25      1      1      1
4      D5      1      1      1      1
5      D6      1     33      1     12
6      D7      1      1      1      1
7      D8      5      1      1      1

修改

看起来你的df可能有字符串而不是数字类型,你可以使用convert_objects将dtype转换为数字:

df = df.convert_objects(convert_numeric=True)

答案 1 :(得分:4)

这是您的数据框:

df = pd.DataFrame({
    "Disease":["D{}".format(i) for i in range(1,9)],
    "Gene1":[0,0,0,24,0,0,0,4],
    "Gene2":[0,0,17,0,0,32,0,0],
    "Gene3":[25,0,0,0,0,0,0,0],
    "Gene4":[0,0,16,0,0,11,0,0]})

  Disease  Gene1  Gene2  Gene3  Gene4
0      D1      0      0     25      0
1      D2      0      0      0      0
2      D3      0     17      0     16
3      D4     24      0      0      0
4      D5      0      0      0      0
5      D6      0     32      0     11
6      D7      0      0      0      0
7      D8      4      0      0      0

最简单的方法是执行

df += 1

但是,因为你有一个字符串(疾病列)

这不起作用。

但我们可以方便地将Disease列设置为索引,如下所示:

df.set_index('Disease', inplace=True)

现在您的数据框如下所示:

         Gene1  Gene2  Gene3  Gene4
Disease                            
D1           0      0     25      0
D2           0      0      0      0
D3           0     17      0     16
D4          24      0      0      0
D5           0      0      0      0
D6           0     32      0     11
D7           0      0      0      0
D8           4      0      0      0

如果我们现在df += 1,我们会得到:

         Gene1  Gene2  Gene3  Gene4
Disease                            
D1           1      1     26      1
D2           1      1      1      1
D3           1     18      1     17
D4          25      1      1      1
D5           1      1      1      1
D6           1     33      1     12
D7           1      1      1      1
D8           5      1      1      1

因为加号操作仅作用于数据列,而不作用于索引。

您也可以在列的基础上执行此操作,如下所示:

df.Gene1 = df.Gene1 + 1