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

khe*_*ins 7 dataframe pandas

我有一个类似下面的数据框.我想在每行的所有值中添加一个.我是这个论坛和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
Run Code Online (Sandbox Code Playgroud)

fir*_*ynx 5

以此为数据框:

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
Run Code Online (Sandbox Code Playgroud)

最简单的方法是

df += 1
Run Code Online (Sandbox Code Playgroud)

但是,由于您有一个字符串列(“疾病”列)

这是行不通的。

但是我们可以方便地将“疾病”列设置为索引,如下所示:

df.set_index('Disease', inplace=True)
Run Code Online (Sandbox Code Playgroud)

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

         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
Run Code Online (Sandbox Code Playgroud)

如果我们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
Run Code Online (Sandbox Code Playgroud)

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

您也可以按列进行操作,如下所示:

df.Gene1 = df.Gene1 + 1
Run Code Online (Sandbox Code Playgroud)


EdC*_*ica 5

您可以过滤df底层dtype是否不是'object':

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
Run Code Online (Sandbox Code Playgroud)

编辑

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

df = df.convert_objects(convert_numeric=True)
Run Code Online (Sandbox Code Playgroud)