2015-06-12 50 views
3

我有一個如下所示的數據框。我想爲每行中的所有值添加一個。我是這個論壇和Python新手,所以我不能概念化如何做到這一點。我需要爲每個值加1。我打算使用貝葉斯概率,當我將它們相乘時,後驗概率將爲0。 PS。我對概率也不熟悉,但其他人也應用了相同的方法。感謝您的幫助提前。我正在使用熊貓來做到這一點。將一個數據框中的所有值加1

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 
+1

如果你的數據框是'df',那麼'df + 1'就可以工作。 numpy和pandas在將標量添加到數組時將它稱爲「廣播」。 – JohnE

回答

1

可以過濾DF基礎D型細胞究竟是不是 '對象':

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) 
+0

當我打印numeric_cols我得到一個空列表,但是當我打印(df [numeric_cols])時,我得到疾病列表D1,D2,D3。抱歉,添麻煩了。我選擇了你的方法,因爲我可能有多達20000個基因,無法輸入每個基因。感謝您的幫助! –

+0

對不起,你說我的代碼不起作用?什麼是你的列的dtype,你可以使用'df.info()'檢查,如果我的答案有幫助和/或回答你的問題,然後你可以接受它,那麼我的左上角會有一個空的刻度標記答案 – EdChum

+0

索引:651項,D1至D651 列:515項,ABI1至ZRSR2 dtypes:object(515) 內存使用情況:2.6+ MB 無.....我不是說你的代碼不工作。我是新手。我懷疑我可能做錯了什麼。 –

3

有了這個是你的數據框:

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 

但是,既然你有一列是字符串(病列)

這是行不通的。

但是,我們可以方便地設置了病列是索引,就像這樣:

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 
相關問題