我有一个类似下面的数据框.我想在每行的所有值中添加一个.我是这个论坛和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)
以此为数据框:
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)
您可以过滤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)