2017-06-12 102 views
-2

我在熊貓中有下表。Python:將函數應用於熊貓數據框中的某些元素/單元

+--------+--------+--------+-----+ 
| A | B | C | D | 
+--------+--------+--------+-----+ 
| foo | b'bar0 | b'foo0 | 253 | 
| b'bar0 | bar | blah | 485 | 
+--------+--------+--------+-----+ 

我想爲單元格中的每個元素提供一個函數,該元素以b'開頭。 功能是:

def elementdecode(data,password): 
    aa=row[2:-1] 
    bb=aa.encode() 
    cc = bb.decode('unicode-escape').encode('ISO-8859-1') 
    return (decode(cc, password).decode()) 

背景:我有一個具有在它們的正常值和加密值的CSV文件,我想申請的解密方法只對未加密的元件。我的計劃是將csv讀入熊貓,並僅對加密的單元應用解密功能(例如,以'b開頭)。一旦加密完成,我將數據導出到新的csv中。我想使用applymap,而不是使用循環,但我不知道如何僅在特定元素上使用它。

謝謝

回答

1

你試過嗎?

def elementdecode(data,password): 
    #if the first condition if not met, the second is not evaluated 
    if (type(x) == str) and ("\'b" in x): 
     aa=row[2:-1] 
     bb=aa.encode() 
     cc = bb.decode('unicode-escape').encode('ISO-8859-1') 
     return (decode(cc, password).decode()) 
    else: 
     return x 

df.applymap(lambda x: elementdecode(x,password)) 
+0

這種表現如何明智? 'if'語句不會使該操作非常緩慢? – valenzio

+0

@valenzio我不這麼認爲,你必須以某種方式過濾它,你可以通過改變if語句中的內容來取得更快的速度,這取決於數據的特殊性,但邏輯應該在那裏,是它工作? – Tbaki

+0

我更新了我的問題,我的數據框的問題是它有不同的格式,字符串,整數,日期,NaN。只有所有條目都是字符串時,您的方法纔有效我想我可以將所有條目格式化爲字符串,因爲無論如何我都將它們寫回到csv。我會回報。 – valenzio

相關問題